我有一种方法可以用shell将字符串简化为数组,但是数组似乎没有值
>>> a='11 12 13 14'
>>> echo $a | awk '{split($0,arr," ")'
1 11
2 12
3 13
4 14
>>> echo ${arr[0]}
>>>
the expected result should be
>>> echo ${arr[0]}
11
如何将字符串拆分后的值存储到数组中
如果值为"-没有文件名扩展触发字符和元素用空格很好地分开-只是读取数组。
arr=($a)
一个更好更安全的版本是使用readarray或mapfile。
readarray -d ' ' -t arr < <(printf "%s" "$a")
readarray -t arr <<<"${a// /$'n'}"
#!/bin/bash
a='11 12 13 14 15'
IFS=' ' read -r -a arr <<<"$a"
declare -p arr
arr2=($a)
declare -p arr2
输出declare -a arr2=([0]="11" [1]="12" [2]="13" [3]="14" [4]="15")
declare -a arr2=([0]="11" [1]="12" [2]="13" [3]="14" [4]="15")
您需要将awk的输出返回给一个shell变量。
$> a='11 12 13 14'
$> arr=($(echo $a | awk '{n=split($0,arr," ");for (i=1;i<=n;i++) { print arr[i] } }'))
$> echo ${arr[0]}
11