shell中shift和eval的用法
shift其实很简单的,就是左移参数列表,shift一次就将最左边的参数$1移出去了,然后
原来的$2现在就变成了$1。
shift后面还可以带上一个数字,指明要移出多少个参数(默认只移出一个),比如说
shift 3 就是移出3个参数,之后原来的$4就变成了现在的$1。
eval就是先将后面的参数执行一遍,将必要的置换都做了,再来执行命令。举个例子:
MYFILE="cat myfile"
echo $MYFILE # output: cat myfile
eval $MYFILE # output: contents of myfile
再举个详细点儿的例子:
#!/bin/bash
# evalit
echo " Total number of arguments passed: $#"
echo " The process ID: $$"
echo " Last argument: " $(eval echo \$$#)
运行脚本:
$ ./evalit alpha bravo charlie
output as follows:
Total number of arguments passed: 3
The process ID: 780
Last argument: charlie
http://www.chengyongxu.com/blog/bash-shell%E4%B8%ADshift%E7%94%A8%E6%B3%95/
shift可以用来向左移动位置参数。
Shell的名字 $0
第一个参数 $1
第二个参数 $2
第n个参数 $n
所有参数 $@ 或 $*
参数个数 $#
shift默认是shift 1
以下边为例:
01 | cat shift .sh |
02 | #----------------------------输出文字-开始---------------------------- |
03 | #!/bin/bash |
04 | until [ -z "$1" ] # Until all parameters used up |
05 | do |
06 | echo "$@ " |
07 | shift |
08 | done |
09 | #----------------------------输出文字-结束---------------------------- |
10 | |
11 | sh shift .sh 1 2 3 4 5 6 7 8 9 |
12 | #----------------------------输出文字-开始---------------------------- |
13 | 1 2 3 4 5 6 7 8 9 |
14 | 2 3 4 5 6 7 8 9 |
15 | 3 4 5 6 7 8 9 |
16 | 4 5 6 7 8 9 |
17 | 5 6 7 8 9 |
18 | 6 7 8 9 |
19 | 7 8 9 |
20 | 8 9 |
21 | 9 |
22 | #----------------------------输出文字-结束---------------------------- |