shell的shift、$*、$@


1、$* 和 $@的区别

1.1)$@,将参数识别为独立的个体:

# cat test.sh 
#!/bin/bash

touch "$@"

# sh test.sh 1 2 3
# ll

total 4
-rw-r--r--. 1 root root 0 Mar 11 10:12 1
-rw-r--r--. 1 root root 0 Mar 11 10:12 2
-rw-r--r--. 1 root root 0 Mar 11 10:12 3
-rw-r--r--. 1 root root 24 Mar 11 10:12 test.sh

1.2)$*,将参数识别为一个整体:

# cat test.sh
#!/bin/bash

touch "$*"

# sh test.sh 1 2 3
# ll
total 4
-rw-r--r--. 1 root root  0 Mar 11 10:11 1 2 3
-rw-r--r--. 1 root root 24 Mar 11 10:11 test.sh

2、shift ,参数左移,通过上面两种方式获取参数,更丝滑

#!/bin/bash


appdir=$1/$2
app_name=$2

shift 2
startup_parameter="$*"
cd $appdir

this_pid=$(cat ${app_name}_pid)
kill -9 ${this_pid}

if [ "$startup_parameter" != 'None' ];then
    nohup java -jar *.jar ${startup_parameter} &> startup.log &
    echo $! > ${app_name}_pid
else
    nohup java -jar *.jar  &> startup.log &
    echo $! > ${app_name}_pid
fi