gpt4 book ai didi

linux - 在 bash 中评估字符串中的空格时的奇怪行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:40 26 4
gpt4 key购买 nike

我在 bash 中有以下字符串

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

我的字符串在每组 3 个字符中包含一个数字。如果数字 < 100,则数字用空格填充。我想提取所有具有通用格式的数字 ${pseed:3*i:3} 并且我想在 while 循环中使用这种格式

当我想显示第一个 0 时:

$echo ${pseed:0:3}
0

我得到了预期的 0

但是当我用 dsplay 第二个 0 时

$echo ${pseed:3:6}
0 0

我得到 0 0,这是意外的。

发生了什么事?

我在显示时指出:

$pseed="  0  0  0  0"
$echo $pseed
0 0 0 0

零之间只有一个空格。

如何在 bash 中避免这种行为?

最佳答案

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

$ 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

bashread 内置命令的扩展使得从字符串中提取固定宽度的字段变得更容易一些:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com