繁体   English   中英

遍历shell脚本中作为函数的参数给出的数组

[英]Iterate through array given as argument to function in shell script

我在遍历bash脚本中作为参数传递给函数的数组时遇到问题。 我以为这个问题的答案可以解决我的问题,但是我遇到了另一个错误,而且问题已经很久了,所以我想我应该问一个新问题。

我正在尝试将此代码转换为函数,因此我可以传递不同的参数:

EX='WT'
declare -a SCN=('fq1' 
'fq2'
'fq3' )

for i in "${SCN[@]}"; do
    echo $i
    echo $EX'_'$i
done

此打印

fq1
WT_fq1  
fq2  
WT_fq2  
fq3  
WT_fq3

我尝试过的

function myfx(){
echo $1
MYNOR=("${!2}")
for i in ${MYNOR[@]}; do
    echo $i
    echo $1'_'$i
done
}
myfx $EX $SCN[@]

不幸的是,我从中得到的只是

WT

它似乎没有在循环内执行语句。

使功能正常工作的一种方法是执行以下操作:

function myfx(){
    echo "\$1=$1 \$2=$2"
    b=$2'[@]'
    for i in "${!b}"; do
        echo "$i"
        echo "$1_$i"
    done
}

myfx "$EX" "SCN"

请注意,该函数使用$EX的值和标签SCN调用。

在函数内部,标签用于构建间接标记b=$2'[@]'

然后,间接令牌用于生成SCN内的值列表。
使用bash ${!b}的间接寻址。


更复杂的选择是仅使用标签来调用该函数:

    function myfx(){
    echo "\$1=$1 \$2=$2"
    a=${!1}
    b=$2'[@]'
    for i in "${!b}"; do
        echo "$i"
        echo "${a}_$i"
    done
}

myfx "EX" "SCN"

唯一增加的复杂性是需要在$EX上进行间接$EX


但是可能最简单的解决方案是传递所有需要的参数:

function myfx(){
    echo "\$1=$1 \$2=$2"
    a=$1; shift
    for i do
        echo "$i"
        echo "${a}_$i"
    done
}

myfx "$EX" "${SCN[@]}"

for i ,简单的方法for i遍历所有参数,在上一行移动后,所有参数都是"${SCN[@]}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM