bash:Bash:坏数组下标

时间:2014-01-28 09:32:51

标签: arrays bash for-loop

 table_list=`grep t_ sql.out | awk '{print $1}'`
 echo $table_list
 #t_acct_adj t_assc_fop t_cpn_dup_use t_cpn_upfront_pexp

 for table in "${table_list[@]}"
 do
     echo $table
 done   

预期结果:

t_acct_adj

t_assc_fop

t_cpn_dup_use

t_cpn_upfront_pexp

实际结果:

坏数组下标

2 个答案:

答案 0 :(得分:4)

要将结果存储到数组中,您需要使用var=( values )语法,或者在这种情况下使用var=( $(command output) )

table_list=($(grep t_ sql.out | awk '{print $1}'))

您也可以使用grep | awk制作此awk。为此,请检查anubhava's answer

实施例

$ cat a
hello
bye
hello2

$ values=($(grep hello a))

$ for v in "${values[@]}"; do echo "$value"; echo "aa"; done
hello
aa
hello2
aa

答案 1 :(得分:1)

您可以使用以下单行awk替换所有脚本:

awk '/t_/ {print $1}' sql.out