算术替换中的命令替换是否会拆分单词?

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 上发布的这个函数的简化形式的更改。

cuo*_*glm 5

不,它没有。

在 中$((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)