我想做这样的事情:
COMMANDS='"ls /" "df ~" "du -hs ~/Devel/"'
for i in $COMMANDS; do
echo $i
done
结果会是:
ls /
df ~
du -hs ~/Devel/
但我找不到空格的正确语法。
最佳答案
COMMANDS=("ls /" "df ~" "du -hs ~/Devel/")
for i in "${COMMANDS[@]}"; do
echo "$i"
done
这使用数组来存储命令。此功能在 ksh
、zsh
中也可用,但在 sh
中不可用。
数组的行为类似于"$@"
参数数组。在 "${ARRAY_NAME[@]}"
上应用 for
循环(引号很重要)将为您连续提供每个项目。如果您省略引号,它们将全部混在一起并拆分为 IFS
环境变量中存在的分隔符 ('\t'
, '\n '
和 ' '
默认情况下)。
关于Bash for 带空格的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32784068/