如何在bash shell中将一个字符串拆分成多个变量?

22 浏览
0 Comments

如何在bash shell中将一个字符串拆分成多个变量?

这个问题在这里已经有答案了

如何在Bash中按分隔符拆分字符串?

我一直在寻找解决方案,找到了类似的问题,只是它们试图用空格将句子分开,并且答案不适用于我的情况。

当前正在将变量设置为以下字符串:

ABCDE-123456

我想将其拆分为2个变量,并消除\"-\"。 例如:

var1=ABCDE

var2=123456

如何实现这一点?


这是对我有用的解决方案:

var1=$(echo $STR | cut -f1 -d-)

var2=$(echo $STR | cut -f2 -d-)

是否可能使用cut命令而不需要分隔符(每个字符都被设置为一个变量)?

var1=$(echo $STR | cut -f1 -d?)

var2=$(echo $STR | cut -f1 -d?)

var3=$(echo $STR | cut -f1 -d?)

等等。

admin 更改状态以发布 2023年5月21日
0
0 Comments

如果你知道只有两个字段,你可以像这样跳过额外的子进程,使用::

var1=${STR%-*}
var2=${STR#*-}

这是干什么的?${STR%-*}删除$STR字符串的从结尾开始的最短匹配-*的子字符串。${STR#*-}也是一样,但是是使用*-模式从字符串的开头开始。它们每个都有相对应的%%##寻找最长的锚定模式匹配。如果有人有一个有用的记忆口诀来记住哪个做什么,请告诉我!我总是要尝试两个才能记住。

有关更多信息,请参见Bash文档

0
0 Comments

要分割一个由-分隔的字符串,可以使用readIFS

$ IFS=- read -r var1 var2 <<< ABCDE-123456
$ echo "$var1"
ABCDE
$ echo "$var2"
123456

编辑:

以下是如何将每个单独的字符读入数组元素:

$ read -ra foo <<<"$(echo "ABCDE-123456" | sed 's/./& /g')"

将数组进行转储:

$ declare -p foo
declare -a foo='([0]="A" [1]="B" [2]="C" [3]="D" [4]="E" [5]="-" [6]="1" [7]="2" [8]="3" [9]="4" [10]="5" [11]="6")'

如果字符串中有空格:

$ IFS=$'\v' read -ra foo <<<"$(echo "ABCDE 123456" | sed $'s/./&\v/g')"
$ declare -p foo
declare -a foo='([0]="A" [1]="B" [2]="C" [3]="D" [4]="E" [5]=" " [6]="1" [7]="2" [8]="3" [9]="4" [10]="5" [11]="6")'

0