最近运行一个实验遇到一个小问题,需要传递训练集名称和测试集名称到一个shell脚本。训练集只有一个,所以比较好传递,但是测试集有好几个,我把它们放在一个字符串数组里传递,但是Shell脚本内对这个数组进行遍历的时候却只能得到第一个数组元素。
狗了一下,发现很多人是只传一个数组进脚本,而不是像我这样不仅传数组参数还传单个参数,所以自己结合狗出来的结果试了一下,方法如下:
我们有个main脚本:
#!/bin/bash
#需要传入的两个测试集的名称数组
test_sets=("test_use_asr001_3k" "test_use_asr003_3k" )
#变量化一下
tests="${test_sets[@]}"
#需要传入的训练集名称
train=“train_set_only”
#将训练集名称和测试集名称数组都传入second.sh脚本
./second.sh $train "$tests"
在被传入的second脚本里:
#!/bin/bash
#获取训练集名称
train=$1
#获取测试集名称数组
tests=("$2")
echo "${tests[@]}"
#遍历测试集名称
for test in ${tests[@]}; do
echo "$test"
done
#接力传递参数给third.sh
./third.sh $train "$tests"
假设我们在second脚本内又把这些参数接力传递给third脚本,在third脚本中我们对这些参数遍历:
#!/bin/bash
train=$1
tests="${2}"
for test in ${tests[@]}; do
echo "3:$test"
done
如此,搞定。