/ / Як розділити слова на bash - linux, bash, ubuntu

Як розділити слова в bash - linux, bash, убунту

Добрий вечір, Люди

В даний час у мене є масив під назвою inputArray, який зберігає вхідний файл 7 рядків за рядком. У мене є слово, яке є 70000($s0), як я розділити слово, щоб воно було 70000 & ($ s0) роздільним?

Я подивився на відповідь, яка вже є на цьому веб-сайті, але не могла зрозуміти, відповідь, яку я подивилася, була:

s="1000($s3)"
IFS="()" read a b <<< "$s"
echo -e "a=<$a>nb=<$b>"

даючи вихід a=<1000> b=<$s3>

Відповіді:

1 для відповіді № 1

Дозвольте мені постріляти.

За певних обставин оболонка буде виконувати "розділення слів", де рядок тексту розбивається на слова. Межі слова визначаються знаком IFS змінна. Типовим значенням IFS є: пробіл, вкладка, новий рядок. Коли рядок потрібно розділити на слова, будь-яка послідовність цього набору символів видаляється для вилучення слів.

У вашому прикладі є набір символів, які розмежовують слова ( і ). Отже, слова в тій строці, які обмежені набором символів IFS, є 1000 і $s3

Що <<< "$s"? Це рядок тут. Він використовується для надсилання рядка на стандартний вхід якоїсь команди. Це як робити

echo "$s" | read a b

за винятком того, що форма не працює, як очікувалося, в баші. read a b <<< "$s" добре працює

Тепер, які обставини відбуваються розщеплення слів? Перший - коли змінна не цитується. Демонстраційна версія:

IFS="()"
echo "$s" | wc    # 1 line, 1 word and 10 characters
echo $s | wc      # 1 line, 2 words and 9 characters

The read команда також розділяє рядок на слова, щоб призначити слова названим змінним. Змінна a отримує перше слово, і b отримує все інше.

Розбита команда:

  IFS="()" read a b <<< "$s"
# ^^^^^^^                      1
#                   ^^^^^^^^   2
#          ^^^^^^^^            3
  1. тільки на час дії read команда, призначте змінну IFS значення ()
  2. надіслати рядок "$s" до read"s stdin
  3. від stdin, використовувати $IFS розділити введення на слова: призначити перше слово змінній a а решта рядка до змінної b. Останні символи від $IFS в кінці рядка відкидаються.

Документація:

Надія, що допомагає.