我有一个bash脚本,它用几个变量调用qsub:
group=group_1
normals=$(IFS=,; echo *.txt)
qsub -v VAR1=$group,VAR2=${normals[@]} [...] run_script.pbsrun_script.pbs
#PBS -l nodes=1:ppn=16
#PBS -l walltime=2:00:00
#PBS -l mem=10GB
group=$VAR1
normals=$VAR2
echo ${normals[@]}在本例中,数组normals包含多个文件名,但当我试图在.pbs脚本中访问这些文件时,只有第一个文件名被打印出来。
在.pbs脚本中传递和访问数组的正确方法是什么?
发布于 2017-09-13 11:25:54
您根本没有将文件列表存储在数组中。您只是在执行命令替换语法$(..),并将输出存储在变量的上下文中,并尝试将其作为数组访问。
获取文件列表(不需要$(..))并将其存储在数组中的正确方法是,
shopt -s nullglob
fileList=(*.txt)
oldIFS="$IFS"
IFS=,
printf -v var_list "%s" "${fileList[*]}"
IFS="$oldIFS"
shopt -u nullglob当nullglob没有返回当前文件夹上的任何文件时,需要使用*.txt选项来处理这种情况。不包括将一些错误吐在控制台上。当我们不再需要选项集时,我们用-u取消它。
使用printf支持的printf选项,可以将以逗号分隔格式的数组输出直接存储到变量var_list中。
现在,您可以将包含逗号分隔格式的文件列表的$var_list传递给所需的命令。
qsub -v VAR1=$group,VAR2="${var_list}"https://stackoverflow.com/questions/46196112
复制相似问题