Mag*_*o C 4 bash array shell-script
我已经阅读了How to split a string into an array in bash但这个问题对我来说似乎有点不同,所以我会使用我的数据提问。
我有来自 STDIN 的这条线:
(5,[a,b,c,d,e,f,g,h,i,j])
Run Code Online (Sandbox Code Playgroud)
五个是我的组 ID,字母是数组的值(组数据)。我需要将组 ID 放入 var 并将字母放入我可以使用的东西中IFS=',' read -r -a array <<< "$tline"
bkpIFS="$IFS"
IFS=',()][' read -r -a array <<<"(5,[a,b,c,d,e,f,g,h,i,j])"
echo ${array[@]} ##Or printf "%s\n" ${array[@]}
5 a b c d e f g h i j
IFS="$bkpIFS"
Run Code Online (Sandbox Code Playgroud)
说明:
bkpIFS="$IFS";然后我们设置IFS到集分隔符,,(,),]并[与IFS=',()]['这意味着我们的输入字符串可以划定一个或更多的这些分隔符。
接下来read -r -a array读取该行并将其拆分为一个数组,该数组array仅基于从Here-String方法中传递的输入字符串中定义的 IFS调用。该-r选项用于告诉read命令\在输入时不要对反斜杠进行扩展。
IFS=',()][' read -a array <<<"(5,[a,b,c,d,e,f,g,h,i,j,\,k])"
echo ${array[@]}
5 a b c d e f g h i j ,k
Run Code Online (Sandbox Code Playgroud)
查看最后一个,k是由输入中的反斜杠引起的,read没有它的-r选项。
随着echo ${array[@]}我们打印阵列中的所有元素。请参阅$* 和 $@ 之间有什么区别?和吉尔斯关于${array[@]}那里的回答有更多细节。
用printf "%s\n" ${array[@]}也有其他的方法来打印数组元素。
现在,您可以使用printf "%s\n" ${array[INDEX]}或相同来打印数组的特定元素echo ${array[INDEX]}。
啊,对不起,忘了IFS回馈给shell,IFS="$bkpIFS":)
或使用awk及其split功能。
awk '{split($0,arr,/[][,)(]/)}
END{for (x in arr) printf ("%s ",arr[x]);printf "\n"}' <<<"(5,[a,b,c,d,e,f,g,h,i,j])"
Run Code Online (Sandbox Code Playgroud)
说明:
在这里,我们根据正则[...]表达式常量中定义的定界符组拆分整行输入,这些定界符/[...]/支持awkusingsplit函数的现代实现。在功能部分阅读更多内容split()。
接下来,END{for (x in arr) printf ("%s ",arr[x]); ...}我们将循环调用数组arr并打印它们对应的值。x这里指向数组元素的索引arr。阅读有关awkBEGIN/END 规则的更多信息。
侧重定向到如何在 bash 中向数组添加/删除元素?.
| 归档时间: |
|
| 查看次数: |
31646 次 |
| 最近记录: |