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