我希望DIR循环遍历所有参数(使用空格和"")。但是这段代码无法识别," cd ef"作为一个。将它们分成两部分。 我怎样才能做到这一点?
#test.sh
echo Number of arguments: $#
if [ $# -eq 0 ]
then
echo "No arguments"
DIR=.
else
DIR="$*"
fi
echo DIR =$DIR
for arg in $DIR;
do
echo $arg;
done
命令
#bash test.sh ab "cd ef"
输出,参数数量:2
但是,将循环中的3个元素枚举为ab, cd
和ef
。
我知道,我能做到,
for arg in "$*";
但这不是这种情况下的解决方案。我可以将DIR用于此目的吗? 该平台是OSX Mavericks shell。
答案 0 :(得分:4)
出于此目的,您需要使用数组而不是常规标量变量 - 而"$@"
,而不是$*
:
if (( $# )); then
dirs=( "$@" )
else
dirs=( . )
fi
for dir in "${dirs[@]}"; do
...
done
另见BashFAQ #5。
答案 1 :(得分:1)
如果您实际上不需要变量DIR
,则可以使用参数扩展形式:
echo "DIR=${@:-.}"
for dir in "${@:-.}"; do
...
done