如何在 BASH 中根据字符拆分字符串?

Jay*_*wig 7 linux ubuntu bash strings

我希望能够按-字符拆分授权码,以便我可以单独对每个段进行操作。我不想使用外部二进制文件 ( awk, grep) - 这是尽可能简约的。我有哪些方法可以实现这一目标?

这是一个示例身份验证代码:

82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb

Dan*_* Li 15

尝试使用内部字段分隔符( IFS):

AUTH_CODE='82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb'

OIFS=$IFS                   # store old IFS in buffer
IFS='-'                     # set IFS to '-'

for i in ${AUTH_CODE[@]}    # traverse through elements
do
  echo $i
done

IFS=$OIFS                   # reset IFS to default (whitespace)
Run Code Online (Sandbox Code Playgroud)

输出:

82a8
bd7d
986d
9dc9
41f5
fc02
2c20
3175
097a
c1eb
Run Code Online (Sandbox Code Playgroud)

通过设置内部字段分隔符,拆分AUTH_CODE-性格,让您通过在新创建的元素遍历foreach循环。


Tom*_*zky 5

您可以使用 IFS,但这更简单:

echo "82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb"- \
  | while read -d - i; do echo "$i"; done
Run Code Online (Sandbox Code Playgroud)

请注意-在要拆分的字符串之后添加- 否则 read 将忽略最后一个标记。

  • 我不明白。什么不可读?您不需要在一行中执行此操作 - 在 `do` 和 `done` 之间可以有任意多行。 (2认同)