Macos bash变量中的参数,然后循环
我希望DIR遍历所有参数(使用空格和“”)。但是这段代码不承认“cd-ef”是一个。把它们一分为二。 我该怎么做Macos bash变量中的参数,然后循环,macos,bash,Macos,Bash,我希望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"
#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。为此,您需要使用数组,而不是常规标量变量,以及“$@”
,而不是$*
:
if (( $# )); then
dirs=( "$@" )
else
dirs=( . )
fi
for dir in "${dirs[@]}"; do
...
done
另请参见。为此,您需要使用数组,而不是常规标量变量,以及“$@”
,而不是$*
:
if (( $# )); then
dirs=( "$@" )
else
dirs=( . )
fi
for dir in "${dirs[@]}"; do
...
done
另请参见。如果您实际上不需要变量
DIR
,则可以使用一种形式的参数展开:
echo "DIR=${@:-.}"
for dir in "${@:-.}"; do
...
done
如果您实际上不需要变量
DIR
,可以使用一种形式的参数展开:
echo "DIR=${@:-.}"
for dir in "${@:-.}"; do
...
done
$*
几乎不适合使用——它将参数与IFS
的第一个字符连接起来,这意味着如果任何参数恰好包含IFS的第一个字符,则无法区分分隔参数的字符和参数中的字符。此外,非导出,非内置变量应至少有一个小写变量,以避免与环境变量和内置变量发生潜在的命名空间冲突。BashFAQ#50(切向)相关,因为它解决了许多相同的误解,导致在不合适的地方使用标量变量。$*
几乎不适合使用——它将参数与IFS
的第一个字符连接起来,这意味着如果任何参数恰好包含IFS的第一个字符,无法区分分隔参数的字符和参数中的字符。此外,非导出、非内置变量应至少有一个小写变量,以避免与环境变量和内置变量发生潜在的命名空间冲突。BashFAQ#50(切向)相关,因为它解决了许多相同的误解,这些误解导致在不合适的地方使用标量变量。