循环中bash脚本内的变量声明

时间:2014-03-28 16:16:32

标签: bash variables while-loop

正如预期的那样,它会将'testEmpty'文件的每一行打印到控制台。

while read i; do
    echo $i
done < testEmpty

....但是这个:

while read i; do
    name=$i
    echo $name
done < testEmpty

仅打印空白行。

我这样做的原因是因为在'testEmpty'文件的每一行都有一个URL,我在同一个while循环中进行卷曲(为了清楚起见已删除)并且我希望将文件扩展名附加到part用作文件名的url,我认为在同一个循环中执行此操作非常简洁。

BTW'testEmpty'文件应该只有1个或者2个条目,所以我不会担心开销等问题,如果我处理大文件,我认为这可能是一个问题,所以我没有必要担心这一点。

谢谢

2 个答案:

答案 0 :(得分:2)

@CharlesDuffy在他建议使用sed不是正确的字符串操作方式时就有了。这个问题的简单答案是:

while read i; do
    name=${i}
    echo $name
done < testEmpty

答案 1 :(得分:0)

此表格

name=$i echo $name

将在启动命令之前替换变量,因此当echo实际运行时,bash会看到

name="contents of the line" echo 

此外,您无法获得上一个行的值,因为var=value cmd ...仅在命令的环境中设置var变量命令的持续时间

您需要确保在您想要取消引用之前设置变量:

name=$i; echo $name
# or if you're launching some other command, protect the variable:
name=$i sh -c 'echo $name'