${#}
用于获取传递给脚本的参数数目
params_count=${#}
echo $params_count
> ./PATH/TO/my_script.sh param1=p1 param2=p2
> 2
${@}
用于获取传递给脚本的参数列表
params_list=${@}
echo $params_list
> ./PATH/TO/my_script.sh param1=p1 param2=p2
> param1=p1 param2=p2
${0}
用于获取脚本文件名
script_name=${0}
echo $script_name
> ./PATH/TO/my_script.sh param1=p1 param2=p2
> ./PATH/TO/my_script.sh
${1}
用于获取传递给脚本的第一个参数
param_1=${1}
echo $param_1
> ./PATH/TO/my_script.sh param1=p1 param2=p2
> param1=p1
${2}
用于获取传递给脚本的第二个参数
param_2=${2}
echo $param_2
> ./PATH/TO/my_script.sh param1=p1 param2=p2
> param2=p2
${*}
用于获取传递给脚本的参数字符串,注意:它是一个整体字符串,不是列表(说实话我没看出来)
params_string=${*}
echo $params_string
> ./PATH/TO/my_script.sh param1=p1 param2=p2
> param1=p1 param2=p2
${?}
用于获取上一个命令的退出状态码
ls
last_return_code=${?}
echo $last_return_code
> ./PATH/TO/my_script.sh param1=p1 param2=p2
> 0
0为ls命令执行成功的返回值
${$}
表示当前进程的PID
cur_pid=${$}
echo $cur_pid
> ./PATH/TO/my_script.sh param1=p1 param2=p2
> 16598
${-}
用于获取当前的 shell 标志
bash_flag=${-}
echo $bash_flag
> ./PATH/TO/my_script.sh param1=p1 param2=p2
> hB
其中字母的含义如下:
- 如果含有
i
,表示当前 shell 是交互式的(interactive)。 - 如果含有
m
,表示启用了监控模式(monitor mode)。 - 如果含有
B
,表示开启了终端宽度自适应功能(brace expansion)。 - 如果含有
H
,表示启用了历史文件追踪功能(history file tracking)。 - 如果含有
h
,表示启用了 hash 命令的记忆功能(hashall)。 - 如果含有
P
,表示启用了函数命令的跟踪功能(privileged)。 - 如果含有
u
,表示启用了 nounset 功能,对未定义变量进行报错(no unset)。 - 如果含有
x
,表示启用了脚本的调试模式(xtrace)。
${_}
用于获取上一个命令的最后一个参数
mkdir my_dir
last_cmd_param=${_}
echo $last_cmd_param
> ./PATH/TO/my_script.sh param1=p1 param2=p2
> my_dir