Нарушение URL-адреса в пространстве в моем сценарии оболочки

#!/bin/sh scriptname=$0 # $0 is the name of the program verbose=no probeonly=no usage () { cat <<EOF Usage: $scriptname [-o] [-a] [-d] [-c] [-r] [-p] [-h] [-w] movie name -a Lead actor and Actress -c Cast -d Duration -h Help -H History of previous searches by the user -o Overview(Actor,Actress,Ratings,Director and Plot) -p Download the poster -r Rating -w Movies to be released this week EOF exit 0 } getUrl() { url_first_part="http://www.imdb.com/find?ref_=nv_sr_fn&q=" url_last_part="&s=all" url="${url_first_part}${OPTARG}${url_last_part}" echo "${url}" content=$(wget ${url} -q -O ~/movie_list) #to save the page source in a local file called movie_list count=$(grep -Po -m 1 "(? &2 getUrl flag='1' #we set flag to 1 so as to check if an option was pased or not.Since it skips the getopt part if no option was passed ;; c) getUrl #echo "-c was triggered, Parameter: $OPTARG" >&2 flag='1' ;; d) getUrl #echo "-d was triggered, Parameter: $OPTARG" >&2 flag='1' ;; h)usage flag='1' ;; H) getUrl #echo "-H was triggered, Parameter: $OPTARG" >&2 flag='1' ;; o) getUrl #echo "-o was triggered, Parameter: $OPTARG" >&2 flag='1' ;; p) getUrl #echo "-p was triggered, Parameter: $OPTARG" >&2 flag='1' ;; r) getUrl #echo "-r was triggered, Parameter: $OPTARG" >&2 flag='1' ;; w) getUrl echo "-w was triggered, Parameter: $OPTARG" >&2 flag='1' ;; \?) echo "Invalid option: -$OPTARG" >&2 flag='1' usage ;; :) echo "Option -$OPTARG requires an argument." >&2 usage flag='1' ;; esac done if [ -z "$flag" ] #Here we check if an option was passed or not then echo "No options were passed" usage fi 

По какой-то причине мой url расщепляется всякий раз, когда я вводил слово, содержащее более одного слова в кавычках. Если я вхожу в пиратов карибу, даже если URL-адрес печатает его как http://www.imdb.com/find? ref_ = nv_sr_fn & q = пираты carribean & s = all.The сайт, который wget идет, это http://www.imdb.com/find?ref_=nv_sr_fn&q=pirates . Я новичок в unix. Пожалуйста, помогите мне с этим. Я не мог отлаживать.

вы защищали почти каждую строку от пробелов, но не здесь:

 content=$(wget ${url} -q -O ~/movie_list) 

Должно быть:

 content=$(wget "${url}" -q -O ~/movie_list) 

И BTW вы предпочитаете использовать /tmp для ваших временных файлов (а не для вашего домашнего каталога)

Есть кое-что не так. На уровне сценариев вам нужны котировки около ${url} :

 content=$(wget "${url}" -q -O ~/movie_list) #to save the page source in a local file called movie_list 

Это препятствует тому, чтобы пробелы вызывали URL-адрес для отправки в виде нескольких параметров в wget .

Другим вариантом, который можно комбинировать с вышеизложенным, является правильное формирование URL-адресов. Замените эти пробелы + или %20 :

 url="${url_first_part}$(perl -pe 'chomp;s/ /+/g; s/([^A-Za-z0-9\+-])/sprintf("%%%02X", ord($1))/seg;' <<<"${OPTARG}" )${url_last_part}"