[英]C how to iterate through function int array of unknown size as argument
[英]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.