我在bash中有以下字符串

pseed="  0  0  0 45 46 78 99100" #there is 2 spaces between 2 zeros

我的字符串在每个由3个字符组成的块中包含一个数字。如果数字${pseed:3*i:3}的数字,我想在while循环中使用这种格式
当我想显示第一个0时:
$echo ${pseed:0:3}
0

我得到了预期的a0
但是当我玩第二个0时
$echo ${pseed:3:6}
0 0

我得到0 0,这是出乎意料的。
怎么了?
我说在展示时:
$pseed="  0  0  0  0"
$echo $pseed
0 0 0 0

零之间只有一个空格。
如何避免这种行为在巴什?

最佳答案

您需要引用变量扩展,以防止任意运行的空白被视为单个单词分隔符。

$ pseed="  0  0  0 45 46 78 99100"
$ echo x${pseed:3:6}x
x 0 0x
$ echo "x${pseed:3:6}x"
x  0  0x

内置命令的bash扩展使得从字符串中提取固定宽度的字段稍微容易一些:
arr=()
while read -n 3 num; do   # -n 3: read 3 characters at a time
    arr+=($num)
done <<< "$pseed"         # Quote to preserve whitespace

关于linux - 在bash中评估字符串中的空格的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16525853/

10-10 04:17