我有一个包含命令列表的数组,我想通过在
for
循环中循环来逐个执行它们。
然而,当命令是单个单词时,它会按预期工作,而当有参数时,它不会按预期工作。
VAR[0]="ls"
VAR[1]="ls -la"
for i in ${VAR[@]}
do
${i}
done
我还需要(如果可能)在同一个 VAR 中绑定多个命令,例如:
VAR[1]="ls -la ; ls -ltr"
您需要更多报价!
VAR[0]="ls"
VAR[1]="ls -la"
for i in "${VAR[@]}"
do
$i
done
学习如何在shell中正确引用,这非常重要:
“双引号”包含空格/元字符的每个文字和 every 扩展:
、"$var"
、"$(command "$var")"
、"${array[@]}"
。使用"a & b"
表示代码或文字'single quotes'
、$'s: 'Costs $5 US'
。见ssh host 'echo "$HOSTNAME"'
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
wiki.bash-hackers.org/syntax/words
unix.stackexchange.com/when-is-double-quoting-necessary
但是,bash FAQ#50 说:
我试图将命令放入变量中,但复杂的情况总是失败!
变量保存数据。函数保存代码。不要将代码放入变量中!在许多情况下,人们尝试将命令或命令参数放入变量中然后运行它们。每个案例都需要单独处理。