我希望DIR循环所有参数(用空格和"")。但这段代码不承认"cd“为一体。把它们分成两半。我怎么能这么做?
#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小牛壳。
发布于 2014-09-03 15:07:00
为此,您需要使用数组,而不是常规标量变量-- "$@",而不是$*。
if (( $# )); then
dirs=( "$@" )
else
dirs=( . )
fi
for dir in "${dirs[@]}"; do
...
done另见BashFAQ #5。
发布于 2014-09-03 15:52:48
如果实际上不需要变量DIR,则可以使用一种参数展开形式:
echo "DIR=${@:-.}"
for dir in "${@:-.}"; do
...
donehttps://stackoverflow.com/questions/25647752
复制相似问题