2014-01-27 3 views

ответ

2

Использование for петля

str="http://example.com http://example2.com" 
for word in $str 
do 
    echo $word 
done 
2

Спонтанно, я бы не использовать grep, но read:

EXAMPLE="http://example.com http://example2.com" 
read URL1 URL2 <<<"$EXAMPLE" 

<<< синтаксис предполагает, что вы используете Bash, однако. В противном случае, вы должны были бы сделать это следующим образом:

read URL1 URL2 <<EOF 
$EXAMPLE 
EOF 
2

Других ответами являются все замечательно, но есть много способов кожи этой проблемы, так вот еще. :-) Так как ваша строка разделенных пробелами, и ваша оболочка по умолчанию разделитель (IFS) включает в себя пространство, вы можете воспользоваться этим:

mystr="http://example.com http://example2.com" 
set -- $mystr 
foo=$1 # http://example.com 
bar=$2 # http://example2.com 

(-- после set не является строго обязательным в данном случае, но это предотвращает появление каких-то глупых вещей в случае, если по какой-то причине ваша строка начиналась с тире.)

2

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

EXAMPLE="http://example.com http://example2.com" 
URL1="${EXAMPLE%% *}" 
URL2="${EXAMPLE#* }" 

Для получения дополнительной информации о том, как они работают, вы можете увидеть страницу управления Bash/Dash.

+0

Да, технически это работает, но, вероятно, проще и понятнее полагаться на токенизацию «IFS», как и во всех других ответах. :-) (И если разделитель не является пространством, достаточно легко настроить 'IFS' соответственно.) –

+0

Я согласен, но все они используют их. Может также представить его. :) Я бы сказал, что немного уродливо мутировать «IFS», чтобы сделать некоторую локальную операцию. – Dolda2000

+0

Это не так уродливо, если вы используете 'local' (поддерживаемый bash и тире), чтобы установить его внутри функции. –

Смежные вопросы