Добрий вечір, Люди
В даний час у мене є масив під назвою 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
- тільки на час дії
read
команда, призначте зміннуIFS
значення()
- надіслати рядок
"$s"
доread
"s stdin - від stdin, використовувати
$IFS
розділити введення на слова: призначити перше слово зміннійa
а решта рядка до змінноїb
. Останні символи від$IFS
в кінці рядка відкидаються.
Документація:
- Розбиття слів
- Тут рядки
- Просте виконання команди, описуючи, чому це призначення IFS діє лише протягом тривалості команди read.
read
команда
Надія, що допомагає.