URL 변수가 있는 wget?

URL 변수가 있는 wget?

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. 쉘 변수(내부 명령 대체 포함)를 사용할 때마다 따옴표로 묶어야 합니다. 유일한 예외는 실제로 변수 값이 쉘의 공백 구분에 의해 영향을 받기를 원한다고 절대적으로 확신하는 경우입니다.

  2. $WK_ARTIST쉘이 변수 이름을 다음과 같이 해석하지 않도록 _중괄호( )로 묶어 모호성을 명확하게 해야 합니다 (변수가 존재하지 않을 수 있으므로 빈 문자열로 평가됨).{}$WK_ARTIST_

    이는 WK_ARTIST에 필요하지만 WK_ALBUM 문자열에는 필요하지 않습니다. 왜냐하면 _쉘 변수 이름(예: AZ, az. 및 첫 번째 문자 뒤의 0-9 문자)에 유효한 문자가 있기 때문 .입니다.

    FOO, FOO_, FOO1, FOO_1및 는 FOOBAR모두 유효하고 완전히 다른 변수 이름입니다.

또는 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

예, 변수를 사용할 수 있지만 변수 이름이 끝나는 위치를 쉘이 알 수 있도록 변수를 따옴표로 묶어야 합니다.

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

$ARTIST_따라서 쉘은 존재하지 않는 변수를 확장하려고 합니다 . 그러나 인용하면 다음과 같습니다.

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

따라서 다음을 시도해 보십시오.

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

관련 정보