Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 使用循环将具有文件名的变量列表串在一起_String_Bash_Shell_Loops_Unix - Fatal编程技术网

String 使用循环将具有文件名的变量列表串在一起

String 使用循环将具有文件名的变量列表串在一起,string,bash,shell,loops,unix,String,Bash,Shell,Loops,Unix,我创建了一个脚本,用于标识一组唯一的文件(从一个大列表中),并将文件路径保存为唯一变量(例如$vol1、$vol2、$vol3…见下文) 我想将变量连接成一个字符串变量,作为单独命令行程序的输入。由于卷的数量可能不同-似乎最适合创建以下性质的循环(?定义我遇到问题的地方): 我在这里使用files+=、eval函数等尝试了几个不同的选项,并继续得到一条错误消息:-bash:vol0001.nii.gz:command not found。有办法解决这个问题吗?文件名需要采用字符串格式,以便输入后

我创建了一个脚本,用于标识一组唯一的文件(从一个大列表中),并将文件路径保存为唯一变量(例如$vol1、$vol2、$vol3…见下文)

我想将变量连接成一个字符串变量,作为单独命令行程序的输入。由于卷的数量可能不同-似乎最适合创建以下性质的循环(?定义我遇到问题的地方):

我在这里使用files+=、eval函数等尝试了几个不同的选项,并继续得到一条错误消息:-bash:vol0001.nii.gz:command not found。有办法解决这个问题吗?文件名需要采用字符串格式,以便输入后续处理步骤

谢谢, David

为此使用数组:

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[*]}"

注意:命令
sed-n“$np”文件
打印文件的第n行(与您的
cat文件| head-$n | tail-1
相同)

您考虑过改用数组吗?你不必乱搞编号的变量,你可以轻松地将它们一次全部传递给commandhmm,当我这么做的时候。。。文件=();a=1;而[“$a”-le“$subNum”];do eval files+=('$vol'${volume});((a++);完成。。。我得到以下错误。bash:[::需要整数表达式。我想,我做错了什么。仍在学习。请在您的问题中添加示例
b0\u volumes\u tmp.txt
all\u volumes.txt
文件,以便我们可以尝试您的代码并提出改进建议。工作!感谢您的帮助。files=“${vol[*]}”似乎是这里的关键。不知道为什么这对我来说如此困难。@DavidPaul在我看来,关键是首先使用数组。避免像瘟疫一样使用
eval
??? files=$vol1
for i in `seq 2 $num_ap_files
do
??? eval files=${files}" $vol"${i) 
done
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[*]}"
my_next_command "${vol[@]}"