gpt4 book ai didi

shell - 在 shell 中使用管道执行变量

转载 作者:行者123 更新时间:2023-12-04 18:16:24 25 4
gpt4 key购买 nike

我有一个命令需要在 shell 脚本中重复使用。该命令包含一个管道,整个命令的输出将通过管道传输到其他命令。

例如假设为简单起见,命令是 ls | tee .然后我可能会将它传递给其他命令,ls | tee | someprogram 说或 ls | tee | anotherprogram .

所以很自然我会想保留ls | tee是一个变量。问题是我似乎无法执行带有管道的变量。

#!/bin/sh
TEST="ls | tee"
$TEST

给出以下输出
ls: cannot access |: No such file or directory
ls: cannot access tee: No such file or directory

如何执行 $TEST 之类的变量上面,whist 能够将输出传递给其他命令吗?

最佳答案

简短的回答是eval .

eval $TEST somefile

eval $TEST otherfile | more

但是,您需要注意 eval表示引用特殊字符和空格等问题。如果一切都很简单( TEST="ls -l | tee"),那就很容易了。如果你在参数或 shell 元字符中有空格,那么很难——非常难——正确地做到这一点。那时,您最好创建一个函数或单独的 shell 脚本。

即便如此,使用函数或 shell 脚本可能会更好。

如果字符串你 eval来自用户,您更要担心!

关于shell - 在 shell 中使用管道执行变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11596606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com