2017-01-04 59 views
0

我正在使用awk拆分来拆分字符串并将其存储到数组中。我不能在脚本中使用该数组。它显示空阵列。使用awk将拆分字符串存储到数组中

echo $pre_session_cmds | awk '{split($0,cmd_array,"};")} END {for(n in cmd_array){ print cmd_array[n] }}' 

for element in "${cmd_array[@]}" 
do 
    echo "command is $element" 
done 

问题: 打印使用awk印刷元件正确,但访问在循环显示为空

+0

该数组'cmd_array'只存在于awk进程中。它不能像你似乎正在做的那样从shell脚本引用。您需要在awk中引用它,或者将它从awk打印到另一个bash中的数组中。 –

回答

0

使用bash解决方案:

cmd_array=($(echo $pre_session_cmds |sed -e "s/};/ /g")) 

或者只是

for element in $(echo ${pre_session_cmds}|sed -e "s/};/ /g");do 
    echo $element 
done 
+2

* Pure * removed;) – klashxx

+2

'元素在$ {pre_session_cmds // \}; /};做'会好得多。但它不等同于OP的要求(因为这也分裂成IFS的元素,而且还受到路径名的扩展)。 –

0

阵列就打印在AWK:

echo $pre_session_cmds | awk '{ split($0,cmd_array,"};") } 
          END { for(n in cmd_array) 
            print "command is " cmd_array[n] }' 
0

在awk中创建的数组只属于awk。 当你离开awk时它不存在。 而是这样做:

declare -a arr 
arr=($(your code here)) 
echo ${arr[0]} 
echo ${arr[*]} 

所以它会变成是:

declare -a arr 
arr=($(echo $pre_session_cmds | awk '{split($0,cmd_array,"};")} END {for(n in cmd_array){ print cmd_array[n] }}')) 
echo ${arr[0]} 
echo ${arr[*]} 

我没有,虽然进行了测试。

+0

感谢有关阵列的解释.. –