linux中shell变量$#,$@,$0,$1,$2的含义解释:
变量说明:
$$
Shell本身的PID(ProcessID)
$!
Shell最后运行的后台Process的PID
$?
最后运行的命令的结束代码(返回值)
$-
使用Set命令设定的Flag一览
$*
所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@
所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1~$n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
----------------------------------我是分割线----------------------------------
脚本中需要将变量当做shell命令运行,通常的方法有多种,比如:
`${var}` 将变量内容当shell命令行执行
$(${var}) 将变量内容当shell命令执行
${var}将变量内容当shell命令执行【不推荐此种方法】
------------------------------我是分割线--------------------------------------
Shell 默认选项 himBH 的解释 $-记录着当前设置的shell选项,himBH是默认值,你可以通过 set 命令来设置或者取消一个选项配置。例如:
set -x
这个可以打开 shell 的调试开关,调试 shell 脚本非常有用,这个时候再检查下 $- 变量的值,可以看到多了 x 字符:
[kodango@mac] ~
$ echo $-
+ echo himxBH # -x 选项设置的效果
himxBH
i - interactive
包含这个选项说明当前的 shell 是一个交互式的 shell,何为交互式?你输入命令,shell 解释执行后给你返回结果,我们在 Terminal 下使用的 shell 就是交互式的,所以 $- 会包含 i 字符。如果我们在一个脚本里面 echo $-,结果是不会包含 i 的。
H - history expand
history expand 这个很多人都基本上不用,包括我也是。我们知道 Shell 会把我们执行的命令记录下来,可以通过 history 命令查看,每一行是序号 + 执行的命令。在 shell 退出时,会将这些信息保存到~/.bash_history 文件中,当然在启动时也会从该文件中加载,不信删除这个文件再打开一个终端试试。
B - brace expansion
Brace expansion 是一个很有用的技巧,我这里简单介绍一个:
[kodango@mac] ~
$ cp /your/path/to/file{,.bak}
很多时候大家需要备份某个文件时,非常头疼的一点就是要重复输入长长地路径,利用 Brace expansion 就可以轻松搞定。
你可以试试通过set +B
来关闭这个功能,与前面几个选项不同的是,这个选项在脚本里面也是默认打开的。
m - monitor mode
字面意思是说打开监控模式,Bash 手册上后面还有一句话"Job control is enabled",Job control 是什么?就是说可以控制进程的停止、继续,后台或者前台执行等。
正常情况下,在交互式模式下,该选项默认是打开的,所以再执行一个比较耗时的命令时,你可以按下CTRL+Z
让它在后台运行,然后可以用 fg 命令将后台运行的任务恢复到前台执行:
h - hashall
Shell 会将命令所在的路径记录下来,避免每次都要查询。