我在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
我得到了预期的a
0
。但是当我玩第二个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/