Bash" while read loop"不能正确识别变量

时间:2017-09-19 16:47:40

标签: bash shell terminal

我正在使用MacBook pro终端执行shell脚本。它循环遍历文本文件,并根据文件中的每一行创建文件名。

#!/bin/bash

year=2010
list=list_test.txt

mydir=thisdir

i=1  # counter

while read line
do
    echo $i $line
    file1=`echo $mydir/file_$year_$line_test.tif`
    file2=`echo $mydir/file_$year_$line_test.tif`
    echo $file1 $file2 

    i=$(($i+1))

done < $list

然而,输出是特殊的:

1 17019
thisdir/file_.tif thisdir/file_.tif
2 17029
thisdir/file_.tif thisdir/file_.tif
3 17039
thisdir/file_.tif thisdir/file_.tif

在循环中,bash无法识别某些变量,例如&#34; year&#34;这是一个全球性的,&#34;线&#34;从文本文件中读取。文本文件如下:

17019
17029
17039

具有完全相同方式的另一个脚本非常有效。这对我来说现在很神秘。

非常感谢任何帮助或评论!非常感谢!

1 个答案:

答案 0 :(得分:2)

${x}是标识符的有效字符,但您希望将其用作文件名中的文字字符。您需要使用完整形式的参数展开$x而不是file1=$mydir/file_${year}_${line}_test.tif file2=$mydir/file_${year}_${line}_test.tif

(此外,命令替换不是必需的。)

def roundup(x):
    return round(int(math.ceil(x / 0.05)) * 0.05,2)