• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2020-09-05 02:50 Aet 隐藏边栏 |   抢沙发  15 
文章评分 2 次,平均分 5.0

shopt支持的bash选项含义

使用shopt -p可以列出所有的bash选项以及开关状态.

nocasematch

bash在case结构的样式对比时忽略大小写的开关.

nounset

打开该选项的情况下,所有变量要先声明才能被使用.

cdable_vars

如果给cd内置命令的参数不是一个目录,就假设它是一个变量名,变量的值是将要转换到的目录

cdspell

纠正cd命令中目录名的较小拼写错误。检查的错误包括颠倒顺序的字符,遗漏的字符以及重复的字符。如果知道一处修改,正确的路径就打印出,命令将继续。只用于交互式shell

checkhash

bash在试图执行一个命令前,先在哈希表中寻找,以确定命令是否存在。如果命令不存在,就执行正常路径搜索

checkwinsize

bash在每个命令后检查窗口大小,如果有必要,就更新LINES和COLUMNS的值

cmdhist

bash试图将一个多行命令的所有行保存在同一个历史项中。这使得多行命令的重新编辑更方便

dotglob

bash在文件名扩展的结果中包括以点(.)开头的文件名

execfail

如果一个交互式shell不能执行指定给exec内置命令作为参数的文件,它不会退出。如果exec失败,一个交互式shell不会退出

expand_aliases

别名被扩展。默认为打开

extglob

打开扩展的模式匹配特征(正常的表达式元字符来自Korn shell的文件名扩展)
bash对case结构中使用高级样式的支持的开关.高级样式的详细用法在case命令.

histappend

当shell退出时,历史清单将添加到以HISTFILE变量的值命名的文件中,而不是覆盖文件

histreedit

如果readline正被使用,用户有机会重新编辑一个失败的历史替换

histverify

如果设置,且readline正被使用,历史替换的结果不会立即传递给shell解析器。而是将结果行装入readline编辑缓冲区中,允许进一步修改.
该变量与历史执行扩展后的结果是否立即执行有关.选项关闭时扩展的结果会被立即执行,如果打开会将扩展结果显示在命令行以供编辑.

hostcomplete

如果设置,且readine正被使用,当正在完成一个包含@的词时bash将试图执行主机名补全。默认为打开

huponexit

如果设置,当一个交互式登陆shell退出时,bash将发送一个SIGHUP(挂起信号)给所有的作业

interactive_comments

在一个交互式shell中,允许以#开头的词以及同一行中其他的字符被忽略。默认为打开

lithist

如果打开,且cmdhist选项也打开,多行命令将用嵌入的换行符保存到历史中,而无需在可能的地方用分号来分隔

mailwarn

如果设置,且bash用来检查邮件的文件自从上次检查后已经被访问,将显示消息“The mail in mailfile has been read”

nocaseglob

如果设置,当执行文件名扩展时,bash在不区分大小写的方式下匹配文件名

nullglob

如果设置,bash允许没有匹配任何文件的文件名模式扩展成一个空串,而不是它们本身

promptvars

如果设置,提示串在被扩展后再经历变量和参量扩展。默认为打开

restricted_shell

如果shell在受限模式下启动就设置这个选项。该值不能被改变。当执行启动文件时,不能复位该选项,允许启动文件发现shell是否是受限的

sourcepath

如果设置,source内置命令使用PATH的值来寻找包含作为参数提供的文件的目录。默认为打开

source

点(.)的同义词

shift_verbose

如果该选项设置,当移动计数超过位置参量个数时,shift内置命令将打印一个错误消息

变量扩展

测试变量存在性及空值

在变量值不存在时返回默认值,否则返回变量值.

在变量不存在或者值为空时返回默认值,否则返回变量值

在变量值为空或者不存在时给变量设置默认值,否则返回变量值

在变量值为空或者不存在时提示错误信息,否则返回变量值

在变量存在时返回指定真值,否则返回null

总结:

取字符串子串/字符串长度

取字符串子串,字符串第一个字符编号为0.取子串的方式有两种:

将由指定的位置开始,截取子字符串到字符串结束位置.

将由指定起始位置开始,截取指定长度的子字符串.

计算字符串长度

在字符串中查找符合规定样式的子串

由字符串前段开始查找,删除相符项

取代或者删除部分字符串

总结:
格式 描述

取变量名称列表/数组索引列表

取变量名称列表,列出所有变量名中以指定样式开头的变量名称.而且各变量之间使用$IFS定义的第一个分隔符隔开.

获取数组的索引列表,每个索引值之间使用$IFS分隔.可以使用for循环遍历

总结:

获取变量值长度

获取变量值的长度.如果是字符串则为字符串的长度

别名和取消别名

使用alias可以为命令起别名.
但在一些情况下给重要的命令起别名可能会存在隐患,为了忽略当前定义过的别名,在将要执行的命令前使用\转义,将会忽略定义的别名.
例如:\ls

多命令执行方式

在命令行一次执行多个命令的方式:

  • 每个命令之间用;隔开.每个命令的执行结果不会影响其他命令的执行,即每个命令都会被执行但不一定成功.
  • 每个命令之间用&&隔开.这种情况下只有前一个命令执行成功才会接着执行下一个命令.
  • 每个命令之间用||隔开.这种情况下若前一个命令执行成功将不会再往下执行,只有当前一个命令执行失败时才会执行后面的命令
  • 使用()将命令组成一组,然后整组执行.()会开启一个子shell环境来执行其中的命令.
    (命令1; 命令2; 命令3; ....)
  • 使用{}将命令组成一组,然后整组执行.{}与()不同他会在现在的shell中执行命令组中的命令.注意{}与命令组之间至少得有一个空格隔开.
    { 命令1; 命令2; 命令3; .... }
  • 将通过管道传递来的stdin数据作为多个命令的参数.一般情况下我们将stdout通过管道作为另一个命令的参数,但是如果我们想将stdout作为多个命令的参数的话,我们可以使用read将stdin保存在一个变量中,再将这个变量供给其他命令使用.
    命令 | {while read 变量; 命令1; 命令2; 命令3; ....}

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享