0

我有一系列要使用 bash 脚本运行的输入文件。这些使用文件位置(所有文件相同)和由输入类型名称和温度组成的单个文件后缀来标识。我希望我的脚本循环遍历名称,然后是温度,以便按以下顺序运行文件:

文件位置_a_300

文件位置_a_290

文件位置_a_281

文件位置_a_270

文件位置_b_300...

等等等等。

这就是我到目前为止所拥有的。我目前的问题是 INPUT 和 OUTPUT 中的 $i 名称调用者不起作用。我收到错误“无法打开输入文件“file_location_300”。回声行工作正常并输出名称和温度。我不明白为什么在输入和输出文件调用者行中省略了名称?

#!/bin/bash

temps=(300 290 281 270)
names=(a b c)

for i in "${names[@]}";

    do

    for j in "${temps[@]}";

        do
        [FILE EXECUTABLE INFORMATION] 
        INPUT=file_location_$i_$j OUTPUT=../out/file_location_$i_$j.out  
        echo $i $j

    done

done
4

2 回答 2

2

那是因为 bash 认为您指的是一个名为i_.

这有效:

INPUT=file_location_${i}_${j} OUTPUT=../out/file_location_${i}_${j}.out  
于 2021-04-07T20:33:06.497 回答
1

您可以使用 bash大括号扩展

for input in file_location_{a,b,c}_{300,290,281,270}; do
    output="../out/$input.out"
    ...
done

改掉使用 ALLCAPS 变量名的习惯,将它们保留为 shell 保留。有一天你会写PATH=something,然后 想知道为什么 你的脚本坏了

于 2021-04-07T20:49:58.837 回答