$# :
$# : 总是表示参数的总数
$@ 和 $*
一般情况下:
$@ 和 $* :都表示传递给函数或脚本的所有参数
所以:
${x[@]} == ${x[*]}
${#x[@]} == ${#x[*]}
但是当它们被双引号" "
包含时,就会有区别了:
$* : 会将所有的参数从整体上看做一份数据
$@ : 仍然将每个参数都看作一份数据,彼此之间是独立的
二、举个栗子
vim test.sh
#!/bin/bash
pids=(num1 num2 num3)
echo "\${#pids[@]}表示参数总数: ${#pids[@]}"
echo "####################"
echo "\${#pids[*]}表示参数总数: ${#pids[*]}"
echo "######### 一般情况 ########"
echo "\${pids[@]}输出每个参数: ${pids[@]}"
echo "\${pids[*]}输出每个参数: ${pids[*]}"
echo "######### 带双引号区别 ########"
for i in "${pids[*]}";do
echo "双引号下\${pids[*]}作为一个整体输出:$i"
done
echo "####################"
for i in "${pids[@]}";do
echo "双引号下\${pids[@]}依然输出每个参数:$i"
done
结果如下:
${#pids[@]}表示参数总数: 3
####################
${#pids[*]}表示参数总数: 3
######### 一般情况 ########
${pids[@]}输出每个参数: num1 num2 num3
${pids[*]}输出每个参数: num1 num2 num3
######### 带双引号区别 ########
双引号下${pids[*]}作为一个整体输出:num1 num2 num3
####################
双引号下${pids[@]}依然输出每个参数:num1
双引号下${pids[@]}依然输出每个参数:num2
双引号下${pids[@]}依然输出每个参数:num3