用于循环更改文件中变量的命令行

Command Line for Loop to Change Variables in File

我有一个编译脚本和 运行s 一段 idl 代码。看起来像这样,

arg1=

idl << EOF
.rnew testvalue_{arg1}.pro
testvalue_{arg1}.pro
EOF

我想 运行 来自命令行的 for 循环,其中 arg1 可以采用不同的名称。到目前为止我所拥有的是,

for arg1 in testvalue.sh; do arg1={'value1', 'value2'}; done

我认为我的逻辑不正确。我错过了什么?

首先,您需要将 $ 放在变量名之前,以便 bash 知道它已被替换
另外你只需要给 testvalue.sh 值,因为它是从 </code> 复制到 <code>$arg1
但是为什么我不建议新建变量,就用</code>两次<br> 所以 <code>testvalue.sh 是:

 idl << EOF
 .rnew testvalue_.pro
 testvalue_.pro

循环:

for arg in 'value1' 'value2'; do ./testvalue.sh $arg; done

我对问题的具体细节有点模糊,但听起来您想将 'value1' 和 'value2' 放在 for-loop 迭代的值列表中:

for arg1 in value1 value2
do
    idl <<EOF
    .rnew testvalue_${arg1}.pro
    testvalue_${arg1}.pro
EOF
done

请注意,我还将 {arg1} 更改为 ${arg1},因为扩展变量需要美元符号。

shell 脚本中的 for 循环将遍历 in 关键字后的每个值。在上面的例子中,它会将 arg1 设置为 value1,然后执行循环的内容,然后继续将 arg1 设置为 value2 并再次执行。

您还可以将值存储在变量中:

values_to_test="value1 value2"

for arg1 in $values_to_test
do
    idl <<EOF
    .rnew testvalue_${arg1}.pro
    testvalue_${arg1}.pro
EOF
done

请记住,这会将分词和路径扩展应用于 values_to_test,因此您需要确保 none 的值包含问号、方括号、星号、空格、制表符, 或换行符。

如果您担心,您可以在循环运行之前通过脚本中的 运行 set -f 禁用路径扩展(从而允许使用问号、方括号和星号)。