有没有方法可以迭代 Bash 脚本中传递的参数?这个答案我的问题向我展示了如何使用每个参数,但我想迭代它们,因为参数的数量是可变的。
我尝试过类似的事情:
for i in {1..10}
do
if [[ -f "$($i)" ]]
then
echo "$($i) is a file"
elif [[ -d "$($i)" ]]
then
echo "$($i) is a directory"
else
echo "$($i) is not a file or directory"
fi
done
但它给了我错误。我也尝试过使用,但没有成功,$$i
而不是$($i)
...
答案1
您应该使用$@
来引用所有参数:
for arg in "$@"
do
if [[ -f "$arg" ]]
then
echo "$arg is a file"
elif [[ -d "$arg" ]]
then
echo "$arg is a directory"
else
echo "$arg is not a file or directory"
fi
done
也可以看看:http://www.tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
答案2
对我来说,用法while + shift
似乎更加灵活:
while [ ! "$1" == "" ]; do
case "$1" in
"--mode" )
MODE="$1 $2"
shift
;;
"--clean" )
CLEAN="$1"
;;
esac
shift
done
然后,您可以传递可变长度的参数。请注意,在模式下,除了循环结束前的移位外,它还会进行额外的移位。