循环这样的变量时遇到问题.我准备了两个例子来说明问题.
EX1:
#!/bin/bash DIRS="$@" for DIR in $DIRS; do echo "$DIR" done
EX2:
#!/bin/bash for DIR in "$@"; do echo "$DIR" done
第二个示例按预期(和必需)工作.快速测试如下:
$ex1 "a b" "c" a b c $ex2 "a b" "c" a b c
原因,我为什么要使用第一种方法是因为我希望能够将多个目录传递给程序,或者没有使用当前目录.像这样:
[ $# -eq 0 ] && DIRS=`pwd` || DIRS="$@"
那么,我如何让例1保持空间安全?
使用数组而不是简单变量.
declare -a DIRS DIRS=("$@") for d in "${DIRS[@]}" do echo "$d" done
这会产生结果:
$bash xx.sh a "b c" "d e f g" h z a b c d e f g h z $