变量内的命令

变量内的命令

我想用从文件中读取的命令行填充变量并执行它。当它是单个命令时没有问题。当我使用 | 时,它不起作用。有什么帮助吗???谢谢

$ f="ls -1"
$ $f
a
a0
a1
a2
a3
b1
cfg
cfile
dfile
e
fcorreo.txt
log
logs
work
$ f="ls -1 | tail -1"
$ $f
ls: cannot access |: No such file or directory
ls: cannot access tail: No such file or directory
$ f='ls -1 | tail -1'
$ $f
ls: cannot access |: No such file or directory
ls: cannot access tail: No such file or directory
$ echo $f
ls -1 | tail -1

答案1

问题是,管道 ( |) 是 shell 运行的“元”命令,它连接两个不同的命令。ls -1 | tail -1运行两个命令 (lstail) 并使用 shell 构造 ( |) 连接到两个命令也是如此。 (所以你的标题A变量内的命令是不正确的,因为你的问题确实是多种的a 内的命令单身的多变的

无论如何,解决方案是使用 shell 解析/执行命令:

f="ls -1 | tail -1"
sh -c "${f}"

或者,您也可以使用eval,它无需分叉新的 shell 进程即可工作:

f="ls -1 | tail -1"
eval "${f}"

答案2

您可以使用如下函数;

f() { ls -1 | tail -1; } 

例如;

user@host $ f() { ls -1 | tail -1; }
user@host $ f
test.txt

相关内容