①shift命令会重新分配位置参数, 其实就是把所有的位置参数都向左移动一个位置.
$1 < --- $2 , $2 < --- $3 , $3 < --- $4 , 等等.
原来的$1 就消失了, 但是$0 (脚本名)是不会改变的 . 如果传递了大量的位置参数到脚本中, 那么shift命令允许你访问的位置参数的数量超过10 个, 当然{}标记法也提供了这样的功能.
$1 < --- $2 , $2 < --- $3 , $3 < --- $4 , 等等.
原来的$1 就消失了, 但是$0 (脚本名)是不会改变的 . 如果传递了大量的位置参数到脚本中, 那么shift命令允许你访问的位置参数的数量超过10 个, 当然{}标记法也提供了这样的功能.
②shift命令执行以后, $@ 将会保存命令行中剩余的参数, 但是没有之前的$1 , 因为被丢弃了.
每次"shift" 都会丢弃$1.
"$@" 将包含剩下的参数.
③位置参数变量:$1 ,$2 ...$9 , ${10},${11}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
------------------>while + shift! 方法1!循环获取位置参数! while (( $# > 0 )) do echo $1; shift; done ----------------->for 循环!方法二 #"$@" -nice--->代表就是参数列表! for i in "$@" do echo $i; done ------------------>!i 间接引用! 方法三 i=1; while (( i <= $# )) do echo ${!i}; # 间接引用! 直接 $1 这样处理会出问题,不加 ! ,输出的就是数字!??因为外面的参数是i 的值,而我们需要使用i,需要 ! 间接引用! let i++; # (( i++ )) (( )) 的运算速度快一些!? done ----------------->两次间接变量应用! 方法四 (独创喔,也就瞎折腾) #!/bin/bash # 间接变量引用 i=1; while (( i <= $# )) do j=i eval j=\$$j # 直接对变量i间接引用的话,不好自加操作了! eval j=\$$j echo $j; let i++; done
Eval的简单了解可以看笔者之前的博文!