Ksh

變數內的命令

  • May 24, 2017

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

$ 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

問題是,管道 ( |) 是由 shell 執行的“元”命令,它連接兩個不同的命令。ls -1 | tail -1執行兩個命令 ( lsand tail) 並使用 shell-construct ( |) 連接到兩個命令也是如此。(所以你在變數中的標題不正確的,因為你的問題實際上是單個變數中的**多個**命令

無論如何,解決方案是使用 shell 解析/執行您的命令:

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

或者,您也可以使用eval,它無需派生新的 shell 程序即可工作:

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

引用自:https://unix.stackexchange.com/questions/318776