我从文件中得到一些命令,如果它们满足某些条件,它们就会运行。假设从文件中读取的命令是$command
.
...
if [ $doCmd -eq 1 ]
then
$command
doCmd=0
break
fi
...
该脚本适用于单字命令,例如ls
. 但是多个单词命令喜欢ls -l
或echo "test"
导致此错误:
x.sh: line x: ls -l: command not found
什么是实现的正确方法?谢谢。
我从文件中得到一些命令,如果它们满足某些条件,它们就会运行。假设从文件中读取的命令是$command
.
...
if [ $doCmd -eq 1 ]
then
$command
doCmd=0
break
fi
...
该脚本适用于单字命令,例如ls
. 但是多个单词命令喜欢ls -l
或echo "test"
导致此错误:
x.sh: line x: ls -l: command not found
什么是实现的正确方法?谢谢。
报价帮助。
这是终端中的示例,您可以从此处获取它以使其在脚本中工作:
$ c='ls -l'
$ $c
total 168
drwx------+ 4 ray staff 136 Aug 3 14:27 Desktop
drwx------+ 11 ray staff 374 Jul 17 15:56 Documents
.
.
.
如果您的 shell 不使用 IFS 在打开时拆分变量,则 $command 不会扩展为两个参数(ls 和 -l),这会将“ls -l”解释为命令本身的单个名称。如果您使用的是 bash,则可以改用数组。而且在引号周围放置变量总是好的:
command=(ls -l)
if [ "$doCmd" -eq 1 ]
then
"${command[@]}"
doCmd=0
break
fi
并进一步具有更好的条件表达式:
if [[ doCmd -eq 1 ]]
或条件算术:
if (( doCmd == 1 ))
Eval 实际上可能是一个选项,但它很危险,因为它不仅重新解释了命令,还重新解释了 shell 的一般语法。
if [ "$doCmd" -eq 1 ]
then
eval "$command"
doCmd=0
break
fi