bash命令

时间:2018-02-18 00:47:52

标签: bash

我对bash脚本很新,并试图阅读一个脚本,发现一些线路真的很混乱,很难在其他地方检查 脚本的一部分是这样的:

normbiasread=`mas_param get tes_bias_normal`
normval=`echo "$normbiasread" | grep -o '\([0-9]*\)\s' | head -1
normval="${normval/ /}"

第一行是从.config文件中读取数组,第二行是选择数字+空格模式,只选择第一个组件。 但我对第3行感到困惑,因为normval似乎已经被定义为第二行的数字,我不知道“$ {normval / /}”是什么意思

3 个答案:

答案 0 :(得分:0)

这是参数替换。这是一个有很好解释的页面:https://www.tldp.org/LDP/abs/html/parameter-substitution.html 所以 这是相关的一点:

  

${var/Pattern/Replacement}

     

Pattern的第一次匹配,在var中替换为Replacement。

     

如果省略Replacement,则Pattern的第一个匹配将被替换,即删除。

因此,在这种情况下,捕获的输出中的第一个空格将被删除。

答案 1 :(得分:0)

参数扩展print(' '.join(just_emails.split())) 只会将${something/ /}变量中的第一个空格替换为空字符串。

在您的安装上运行${something},并搜索标题为man bash的部分将告诉您这一点以及您可以执行的更多操作。

这几乎肯定与您的parameter expansion搜索字符串为grep,最后包含空格匹配字符'\([0-9]*\)\s'的事实有关。假设匹配实际的空间不是我本来会做的,但原作者可能有更多的信息。

答案 2 :(得分:-1)

在'head -1'之后你需要一个反推。