我正在使用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
具有完全相同方式的另一个脚本非常有效。这对我来说现在很神秘。
非常感谢任何帮助或评论!非常感谢!
答案 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)