變數內的命令

變數內的命令

我想用從文件中讀取的命令行填充變數並執行它。當它是單一命令時沒有問題。當我使用 | 時,它不起作用。有什麼幫助嗎?謝謝

$ 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

相關內容