Bash 스크립트 오류

Bash 스크립트 오류

bash-5.0-6에서 다음 스크립트를 실행하려고 하면 구문 오류가 발생합니다.

wget -nv -O index.html "https://de.wikibooks.org/w/index.php?title=Spezial%3APrefixindex&namespace=0&from=$buch"

결과 오류 메시지:

2020-08-24 20:38:51 URL:https://de.wikibooks.org/w/index.php?title=Spezial:Pr%C3%A4fixindex&namespace=0&from=Mathematik%3A_Lineare_Algebra [96400] -> "index.html" [1]
get_wikibooks.sh: 18: Syntax error: Unterminated quoted string

"%" 기호로 인해 오류가 발생하는 것 같습니다. 하지만 스크립트를 사용 가능하게 하려면 어떻게 작성해야 합니까?

미리 감사드립니다. 안녕 한스

PS 내 전체 코드는 다음과 같습니다

set -x
#!/bin/bash
buch=$(zenity --entry --title "Download eines Wikibooks" --text "Bitte geben Sie den Buchtitel an:")
buch=$(echo $buch | sed "s/ /_/g")
mkdir -p ~/wikibooks/$buch
cd ~/wikibooks/$buch
wget -nv -O index.html 'https://de.wikibooks.org/w/index.php?title=Spezial%3APrefixindex&namespace=0&from=$buch'
if [ $? -ne 0 ] ; then
        zenity --error --title "Download eines Wikibooks - Fehler" \
          --text "Ein Fehler ist aufgetreten\! \nÜberprüfen sie die Internet-Verbindung und den Buchtitel."
fi
wget -nv -c $(cat index.html | tr '"' '\n’ | egrep "^/wiki$buch" | sort -u | sed "s#^#https://de.wikibooks.org#")
if [ $? -ne 0 ] ; then
        zenity --error --title "Download eines Wikibooks - Fehler" \
          --text "Ein Fehler ist aufgetreten\! \nÜberprüfen sie die Internet-Verbindung und den Buchtitel."
fi
for i in $(ls); do sed "s#href=\"/wiki/$buch#href=\"./$buch#g" $i > $i.temp; mv $i.temp $i; done
zenity --info --title "Download eines Wikibooks" --text "Herunterladen des Buches erfolgreich\!"

답변1

코드에 인용 오류가 있습니다. 다음 줄을 고려하십시오.

wget -nv -c $(cat index.html | tr '"' '\n’ | egrep "^/wiki$buch" | sort -u | sed "s#^#https://de.wikibooks.org#")

tr 명령은 입니다 tr '"' '\n’. 해당 명령의 마지막 따옴표는 유니코드(ASCII 아님) 역따옴표입니다. 이는 쉘 작은따옴표로 유효하지 않습니다.

tr '"' '\n’로 교체하세요 tr '"' '\n'.

그런 다음 코드를 잘라내어 붙여넣으세요. shellcheck.net 식별된 나머지 오류(중요) 또는 경고(중요할 수 있음)를 수정합니다.

답변2

자체적으로 동일한 명령을 실행하면 정상적으로 작동합니다. 그러나 $URL 내에 있으므로 " try를 사용하면 변수로 계산될 수 있습니다.

wget -nv -O index.html 'https://de.wikibooks.org/w/index.php?title=Spezial%3APrefixindex&namespace=0&from=$buch'

작은따옴표에 주의하세요 '. $buchbash 스크립트 내의 변수가 아닌 한.

관련 정보