我创建了一个脚本,该脚本可以识别一组唯一的文件(从一个很大的列表中),并将文件路径另存为唯一变量(例如$ vol1,$ vol2,$ vol3 ...参见下文)。
for volume in `seq 1 $num_ap_files`
do
bindex=$(cat ../b0_volumes_tmp.txt | head -$volume | tail -1)
eval 'vol'${volume}=$(cat ../all_volumes.txt | head -$bindex | tail -1)
done
我想将变量连接到一个字符串变量中,以用作单独命令行程序的输入。由于卷的数量可能有所不同-创建具有以下性质的循环似乎最合适(???定义我遇到的问题):
??? files=$vol1
for i in `seq 2 $num_ap_files
do
??? eval files=${files}" $vol"${i)
done
我在这里使用files + =,eval函数等尝试了一些不同的选项,并继续收到错误消息:-bash:vol0001.nii.gz:找不到命令。有没有解决的办法?文件名必须为字符串格式,以供后续处理步骤使用。
谢谢, 大卫
答案 0 :(得分:2)
为此使用数组:
/StateDataSet/State[Name ='Washington' and not (State[Name='Washington'] = following-sibling::State[Name='Washington'])]/City
变量vol=()
for ((volume = 1; volume <= num_ap_files; volume++)); do
bindex=$(sed -n "$volume p" ../b0_volumes_tmp.txt)
vol[$volume]=$(sed -n "$bindex p" ../all_volumes.txt)
done
files="${vol[*]}"
包含数组files
的内容作为一个字符串。
如果您现在想使用vol
的每个元素作为参数来调用命令,则无需使用vol
这样的中间变量:
files
注意:命令my_next_command "${vol[@]}"
打印文件的第N行(与您的sed -n "$N p" file
相同)