为什么没有在$ url =" $ number_foo"?中扩展$ number

时间:2014-12-28 19:58:55

标签: bash variables

使用此代码:

for i in {10000..99999}
do
    for j in {0..99999}
    do
        for k in {0..999}
        do
            number="$i$j$k"
            url="$number/$number_LNN_0001.png"

            wget mywebsite.com/$url
        done
    done
done

从我的服务器取回我的文件,它给出了这个奇怪的输出:

--2014-12-28 20:52:45--  http://www.mywebsite.com/1000000/.png
2014-12-28 20:52:45 ERROR 404: Not Found.

--2014-12-28 20:52:45--  http://www.mywebsite.com/1000001/.png
2014-12-28 20:52:45 ERROR 404: Not Found.

我不明白为什么不是http://www.mywebsite.com/1000001/1000001_LNN_0001.png

2 个答案:

答案 0 :(得分:3)

您需要使用

url=$number/${number}_LNN_0001.png
wget "http://mywebsite.com/$url"

否则,_(和后续字符)将被解析为变量名称的一部分。 (对于第一个$number,这不是必需的,因为/不是shell变量名中的有效字符。)

答案 1 :(得分:1)

因为这个

$numbers_LNN_0001

在Bash中创建一个完全正确的变量 name - 它在你的脚本中不存在。 如果要将变量值与其他字符串组合在一起但变量周围没有空格,则必须使用${NAME}

            url="$number/${number}s_LNN_0001.png"

有关变量的更多信息:http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

  

当参数是具有多个数字的位置参数时,或者当参数后跟一个不被解释为其名称一部分的字符时,需要括号。