як розділити рядок після та перед пробілом у скрипті оболонки?


Відповіді:


33

Окрім пропозиції Язонріяна , ви можете використовувати cut:

echo $var | cut -d' ' -f1

Вище cutх років echoвихід з космічним роздільником ( -d ' ') і виводить перше поле ( -f1)


це не працює. я вже користувався ним. він говорить, що команда не знайдена
сурбхі

3
@surbhi Що говорить команда не знайдена? cutє стандартною утилітою. У вашому сценарії, ймовірно, є помилка десь в іншому місці. Більш загально, ніколи не кажіть "це не працює". Завжди кажіть, який саме код ви запустили, саме те, що трапилося, і скопіюйте повідомлення про помилки.
Жиль "ТАК - перестань бути злим"

Цю відповідь слід прийняти, оскільки це найбільш стислий і прямий спосіб. Зрозуміло, це не спрацює у випадках, які складніші за наведений приклад.
Dan Nguyen

10

Акуратний спосіб зробити це - використовувати масив bash, щоб розділити рядок на пробіли. Ви можете оголосити масив просто за допомогою дужок:

var="129 148     181"
vars=( $var )
echo "First  word of var: '${vars[0]}'"
echo "Second word of var: '${vars[1]}'"
echo "Third  word of var: '${vars[2]}'"
echo "Number of words in var: '${#vars[@]}'"

це говорить команду не знайдено
surbhi

Це залежить від вас, використовуючи bash. Якщо ви використовуєте іншу оболонку, вона може не працювати. echo $SHELLповинен показувати: /bin/bashабо подібне.
gogoud

не працює zsh; (
TonyH

Це робить роботу в ZSH zoom="one two three"; declare -a zoomie=( $( echo $zoom | cut -d' ' -f1- ) ); echo ${zoomie[2]};
TonyH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.