我正在研究一些 bash 脚本转换为 C++ 并遇到了这一行......
word="yahoo"
word=$word"`expr substr '${ -b :board}' 1 3`"
我理解 expr substr 的作用,但我提供"${ -b :board}"的论点对我来说没有任何意义。
当我尝试在终端上运行它时:
echo $word
输出:
yahoo${
我将不胜感激任何意见,谢谢。
这个问题不是关于 Bash 或 sh,而是关于expr
,一个独立的命令,例如 GNU Coreutils 的一部分。如果我们查阅手册,我们会发现
expr
计算表达式并将结果写入标准输出。表达式的每个标记必须是单独的参数。
和
substrstring position length
返回从position
开始且长度最多为length
的string
的子字符串。如果position
或length
为负数、零或非数字,则返回 null 字符串。
所以命令
expr substr '${ -b :board}' 1 3
获取字符串${ -b :board}
并提取长度为 3 的子字符串,从位置 1 开始,即${
。
命令
word=$word"`expr substr '${ -b :board}' 1 3`"
将expr
命令放入命令替换(反引号)中,并将结果附加到$word
的扩展中,此时包含yahoo
,所以这就是你最终得到yahoo${
的方式。
话虽如此,我看不出这样做的理由。expr
命令的输出是一个常量字符串,因此您实际上可以将所有内容替换为
word='yahoo${ '
作为旁注,在现代 Bash 中,您可以通过参数扩展获得相同的功能:
word='yahoo'
var='${ -b :board}'
word+=${var:0:3}
但结果是一样的,如果没有更多的背景,似乎一开始就没有任何意义。