关于Bash内置变量$@数组赋值仅获首个参数的疑问
Bash中
$@在括号赋值时的行为解释 你遇到的核心问题是普通变量赋值和数组变量赋值的区别:
关于
arg2=("$@")
这是Bash的数组赋值语法,双引号包裹的$@会将每个命令行参数分别作为数组的独立元素。执行bash test.sh argument1 argument2后,arg2会变成一个数组:arg2[0] = argument1arg2[1] = argument2
而当你直接使用echo "$arg2"时,Bash默认只读取数组的第一个元素(索引为0的元素),所以只会输出argument1。如果要输出数组所有元素,需要用echo "${arg2[@]}";要读取特定索引的元素,用echo "${arg2[1]}"。
关于
arg1="$@"
这是普通字符串变量的赋值,双引号包裹的$@会将所有命令行参数合并成一个以空格(IFS默认分隔符)分隔的字符串,所以arg1的值就是argument1 argument2,直接echo "$arg1"自然会输出全部内容。
额外补充:如果去掉双引号,arg2=$@和arg1=$@的行为会因为分词变得混乱,所以双引号在处理$@这类特殊变量时至关重要。
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

