脚本百例—1:$-含义及解释
标签搜索

脚本百例—1:$-含义及解释

mrui
2024-09-18 / 0 评论 / 56 阅读 / 正在检测是否收录...

$-记录着当前设置的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
0

评论

博主关闭了当前页面的评论