wget 带有 URL 变量?

wget 带有 URL 变量?

我想知道是否可以在 wget 使用的 url 中使用变量?我正在尝试在 BASH 中重新创建:我目前有:

WK_ARTIST="$(echo $ARTIST | sed 's/\ /\_/g' )"
WK_ALBUM="$(echo $ALBUM | sed 's/\ /\_/g' )"
echo "$WK_ARTIST"
echo "$WK_ALBUM"

wget https://en.wikipedia.org/wiki/File:"$WK_ARTIST"_-_"$WK_ALBUM".jpg

我明白了

Warning: wildcards not supported in HTTP.
--2021-06-10 07:24:20--  https://en.wikipedia.org/wiki/File:Lamb_Of_God_-_%1B[1;36mLamb_Of_God.jpg

这能做到吗。

答案1

WK_ARTIST="$(echo "$ARTIST" | sed 's/ /_/g' )"
WK_ALBUM="$(echo "$ALBUM" | sed 's/ /_/g' )"
echo "$WK_ARTIST"
echo "$WK_ALBUM"

wget "https://en.wikipedia.org/wiki/File:${WK_ARTIST}_-_$WK_ALBUM.jpg"
  1. 每当使用 Shell 变量时(包括内部命令替换),都应该用引号引起来。唯一的例外是当您绝对确定您实际上希望变量的值受到 shell 的空白分割的影响时。

  2. $WK_ARTIST需要通过_用大括号 ( {}) 括起来来消除歧义,以便 shell 不会将变量名称解释为$WK_ARTIST_(该变量可能不存在,因此计算结果为空字符串)。

    这对于 WK_ARTIST 是必需的,但在 WK_ALBUM 的字符串中则不需要,因为_是 shell 变量名称中的有效字符(就像 AZ、az. 和第一个之后的字符 0-9 一样),而.不是。

    FOOFOO_FOO1FOO_1FOOBAR都是有效且完全不同的变量名称。

或者,使用 bash 的内置搜索和替换功能而不是echo ... | sed

WK_ARTIST="${WK_ARTIST// /_}"
WK_ALBUM="${WK_ALBUM// /_}"
echo "$WK_ARTIST"
echo "$WK_ALBUM"

wget "https://en.wikipedia.org/wiki/File:${WK_ARTIST}_-_$WK_ALBUM.jpg"

或者,如果您要多次使用该 URL(或者只是为了使脚本更易于阅读),则值得执行以下操作:

...
URL="https://en.wikipedia.org/wiki/File:${WK_ARTIST}_-_$WK_ALBUM.jpg"
...
wget "$URL"

答案2

是的,您可以使用变量,但是您需要用引号括起来,以便 shell 知道变量名在何处结束:

$ ARTIST=foo
$ ALBUM=bar
$ echo $ARTIST_-_$ALBUM.jpg
-_bar.jpg

因此,shell 正在尝试扩展一个名为 的变量$ARTIST_,该变量不存在。但是,如果你引用:

$ echo "$ARTIST"_-_"$ALBUM".jpg
foo_-_bar.jpg

所以,尝试:

wget https://en.wikipedia.org/wiki/File:"$ARTIST"_-_"$ALBUM".jpg

相关内容