如何在BASH中对字符进行分割?

我希望能够通过-字符分割授权代码,以便我可以分别在每个段上进行操作。 我不想使用外部二进制文件( awkgrep ) – 这是尽可能简单的。 有什么办法可以做到这一点?

这是一个示例authentication代码:

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

尝试使用内部字段分隔符 ( 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) 

输出:

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

通过设置内部字段分隔符,可以将AUTH_CODE分割为-字符,允许您在foreach循环中遍历新创build的元素。

你可以使用IFS,但是这很简单:

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

请注意添加-string拆分后 – 读取将忽略最后一个标记,否则。

另一种模式匹配和数组的方式:

 AUTH_CODE='82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb' array=( ${AUTH_CODE//-/ } ) for j in ${array[@]} ; do echo $j ; done 

只需使用参数扩展:

 AUTH_CODE='82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb' echo "${AUTH_CODE//-/$'\n'}" 

输出:

 82a8 bd7d 986d 9dc9 41f5 fc02 2c20 3175 097a c1eb 
 for i in {1..10}; do echo '82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb'|cut -d"-" -f$i;done