bash 在 for

问题描述 投票:0回答:1

我有一个包含命令列表的数组,我想通过在

for
循环中循环来逐个执行它们。 然而,当命令是单个单词时,它会按预期工作,而当有参数时,它不会按预期工作。

VAR[0]="ls"
VAR[1]="ls -la"

for i in ${VAR[@]}
do
    ${i}
done

我还需要(如果可能)在同一个 VAR 中绑定多个命令,例如:

VAR[1]="ls -la ; ls -ltr"

bash scripting
1个回答
1
投票

您需要更多报价!

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 说:

我试图将命令放入变量中,但复杂的情况总是失败!

变量保存数据。函数保存代码。不要将代码放入变量中!在许多情况下,人们尝试将命令或命令参数放入变量中然后运行它们。每个案例都需要单独处理。

https://mywiki.wooledge.org/BashFAQ/050

© www.soinside.com 2019 - 2024. All rights reserved.