shopt命令

-- TOC --

shopt命令用来配置Shell的功能参数,跟set命令的作用有些类似。

之所以会有这两个类似命令的主要原因是,set是从 Ksh 继承的,属于 POSIX 规范的一部分,而shopt是 Bash 特有的。

shopt介绍

$ help shopt
shopt: shopt [-pqsu] [-o] [optname ...]
    Set and unset shell options.

    Change the setting of each shell option OPTNAME.  Without any option
    arguments, list each supplied OPTNAME, or all shell options if no
    OPTNAMEs are given, with an indication of whether or not each is set.

    Options:
      -o    restrict OPTNAMEs to those defined for use with `set -o'
      -p    print each shell option with an indication of its status
      -q    suppress output
      -s    enable (set) each OPTNAME
      -u    disable (unset) each OPTNAME

    Exit Status:
    Returns success if OPTNAME is enabled; fails if an invalid option is
    given or OPTNAME is disabled.

shopt能够控制的开关还蛮多的,直接输入shopt就能看到,一长串on或者off,而直接接开关名称,就能看到此开关的状态。

-s:set

-u:unset

$ shopt nullglob
nullglob        off

-q的作用也是查询某个参数是否打开,但不是直接输出查询结果,而是通过命令的执行状态$?表示查询结果。如果状态为0,表示该参数打开;如果为1,表示该参数关闭。因此,这种方式很适合用在shell脚本中。

nullglob

请先学习glob规则

nullglob参数用来控制shell执行glob时,如果遇到空的pathname list,应该如何操作。默认此参数为off,当glob遇到空的list时,命令行会直接使用wildcard pattern本身。如果将此参数设置为on,遇到空list时,命令行这部分就是空的了。

$ ls tck*
ls: cannot access 'tck*': No such file or directory
$ shopt -s nullglob
$ ls tck*
merge                     tc-createbitmap

当打开nullglob后,命令ls tck*实际上就变成了单纯的ls命令。

本文链接:https://cs.pynote.net/sf/linux/shell/202111162/

-- EOF --

-- MORE --