我想做这样的事情:

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

这使用数组来存储命令。此功能在kshzsh中也可用,但在sh中不可用。

数组的行为类似于"$@"参数数组。在for上应用"${ARRAY_NAME[@]}"循环(引号很重要)将为您连续提供每个项目。如果您省略引号,则它们都将被混在一起并分割为IFS环境变量(默认为'\t''\n'' ')中存在的分隔符。

关于重击带空格的循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32784068/

10-11 01:45