Wil*_*ard 3 bash arithmetic words
我好像从本站的评论中记得算术展开的内容可能是分词的,但是又找不到评论了。
考虑以下代码:
printf '%d\n' "$(($(sed -n '/my regex/{=;q;}' myfile)-1))"
Run Code Online (Sandbox Code Playgroud)
如果sed
命令输出一个多位数字并且$IFS
包含数字,那么在算术发生之前,命令替换是否会进行单词拆分?
(我已经使用额外的双引号进行了测试:
printf '%d\n' "$(("$(sed -n '/my regex/{=;q;}' myfile)"-1))"
Run Code Online (Sandbox Code Playgroud)
这不起作用。)
顺便说一句,上面的示例代码是我刚刚在 Stack Overflow 上发布的这个函数的简化形式的更改。
不,它没有。
在 中$((expression))
,表达式被视为在双引号中,正如POSIX 指定的那样。
但请注意,命令替换中的表达式仍需遵守split+glob
:
$ printf '%d\n' "$(( $(IFS=0; a=10; echo $a) + 1 ))"
2
Run Code Online (Sandbox Code Playgroud)
用双引号:
$ printf '%d\n' "$(( $(IFS=0; a=10; echo "$a") + 1 ))"
11
Run Code Online (Sandbox Code Playgroud)
与其他扩展一样,算术扩展,如果不在双引号内,则经历split+glob
:
$ IFS=0
$ echo $((10))
1
Run Code Online (Sandbox Code Playgroud)