$-记录着当前设置的shell选项,himBh是默认值。可以通过set命令来设置或者取消一个选项配置。例如:
set -x
这个命令可以打开shell的调试开关,调试shell脚本非常有用。这个时候再检查$-变量的值,可以看到多了一个x字符。
[root@web1 ~]# echo $-
himxBH
具体含义
- h:hashall:记录命令所在的路径,避免每次都要查询
- i:interactive:说明当前的shell是一个交互式的shell
- m:monitor mode 打开监控模式,可以控制进程的停止、继续,后台或者前台执行等。(ctrl+z命令,fg、bg命令)
- B:Brace expansion花括号扩展,可以让 bash生成任意字符串 的一种扩展功能,生成的字符串可以是不存在的路径或者文件。具体示例见文章后半部分。
H:history expand:展开历史记录列表中的命令,可以通过“!”开完成,如!!返回最近执行的命令,!n返回第n个历史命令等。
花括号扩展
是一个非常有用的技巧,在某些场合可以省略长路径的重复输入,比如:
[root@web1 mnt]# ls 1.txt [root@web1 mnt]# cp /mnt/1.txt{,.bak} [root@web1 mnt]# ls 1.txt 1.txt.bak
格式一:
preamble+{string1,string2,...stringN}+preamble
注意;左右的花括号是必须的,中间的字符串列表由逗号隔开, 逗号前后不能有空格 ,如果string中有空格,需要使用单引号或双引号括起来。
bash在实际扩展中,会将preamble和花括号中的所有字符串(按照从左到右的顺序)相连,最后加上postscript。
花括号中间只有要有一个逗号,负责bash不认为这是花括号扩展。
示例:[root@web1 ~]# echo sp{el,il,al} spel spil spal [root@web1 ~]# echo sp{el,il, al} sp{el,il, al} [root@web1 ~]# echo sp{el,il," al"} spel spil sp al [root@web1 ~]# echo sp{el,il," "al} spel spil sp al [root@web1 ~]# echo sp{,el,il,al} sp spel spil spal [root@web1 ~]# echo sp{,el,il,,al} sp spel spil sp spal [root@web1 ~]# echo sp{,el,il,,al}ps spps spelps spilps spps spalps
格式二:
preamble+{<start>..<end>[..<incr>]}+postscript
其中
.. 组合而成的表达式叫做序列表达式,表示一个特定的范围。当 和 是数字时,代表的是数字范围,当 和 是单个字母时,代表的是字符范围。( 和 必须同为数字或者字母,斗则bash不认为是花括号扩展,而是原样输出。)
incr是可选项,代表的是区间范围的递增数,它必须是数字。
示例:
[root@web1 ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@web1 ~]# echo {10..1}
10 9 8 7 6 5 4 3 2 1
[root@web1 ~]# echo {a..g}
a b c d e f g
[root@web1 ~]# echo {a..g..2}
a c e g
[root@web1 ~]# echo {1..10..2}
1 3 5 7 9
[root@web1 ~]# echo {0..10..2}
0 2 4 6 8 10
[root@web1 ~]#
如果是数字,可以通过在数字前面加0的方式使得输出结果的长度保持一致,比如:
[root@web1 ~]# echo {00..10}
00 01 02 03 04 05 06 07 08 09 10
[root@web1 ~]# echo {010..10}
010
[root@web1 ~]# echo {001..10}
001 002 003 004 005 006 007 008 009 010
评论