Поиск по сайту:

Чтобы познать человека, нужно его полюбить (Л. Фейербах).

Как использовать $IFS в Bash?

4 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
11 апреля 2021
Bash Heredoc
В сценариях мы должны разбивать строковые данные по разным причинам. Разделение – это встроенная функция во многих компьютерных языках, которая разделяет каждую строку данных на различные части. Однако в bash отсутствует встроенная функция для разделения строки. Чтобы разбить любое строковое значение, необходимо использовать множество одиночных и составных разделителей. Переменная IFS (внутренний разделитель полей) используется для указания определенного разделителя для разделения строк. В этой статье вы узнаете, как использовать различные методы для иллюстрации процесса взлома строкового значения в bash с помощью $IFS.

 

Предпосылки

Убедитесь, что у вас установлена ​​и настроена система на базе Linux. Мы будем работать над системой Ubuntu 20.04 Linux. Войдите в систему под учетной записью пользователя Ubuntu, чтобы начать работу над IFS. Будет лучше, если вы войдете в систему под своей учетной записью root. После входа в систему запустите терминал командной строки в своей системе из области «Действия».

 

Пример 01: IFS разделяет строку с использованием пробела в качестве значения

В нашем первом примере мы поймем концепцию разделения строки в bash при использовании пробела в качестве значения-разделителя с помощью переменной IFS. Во-первых, мы должны создать в нашей системе файл bash. Мы можем создавать новые файлы в нашей системе Linux с помощью команды touch. Как показано ниже, мы создали файл bash file1.sh с помощью инструкции touch:

$ touch file1.sh

 

Откройте домашний каталог вашей системы Linux, используя значок папки, отображаемый в левом углу рабочего стола Ubuntu 20.04. В нем вы найдете свой недавно созданный файл bash «file1.sh». Откройте файл «file1.sh» и введите приведенный ниже сценарий. Во-первых, мы определили строку с именем «str» с некоторым строковым значением в ней. Затем мы определяем переменную-разделитель IFS как переменную, имеющую в качестве значения пробел. После этого мы использовали оператор чтения для сохранения и чтения разделенных данных в массив strarr с помощью флага «-a». Оператор ‘echo’ используется для печати строки строки вместе с подсчетом общего количества слов в массиве с использованием “${#strarr[*]}”. Цикл «for» используется для печати значений массива в разделенной форме с использованием переменной «var». Обратная косая черта «\n» использовалась в строке печати вместе с переменной «var», чтобы разделить одну строку после каждого значения массива. Сохраните сценарий с помощью клавиши «Ctrl+S» и закройте файл, чтобы продолжить.

Читать  Как установить Tomcat 9 на Ubuntu 20.04

file1.sh

#!/bin/bash 

str="Меня зовут AndreyEX" 
IFS=' '
read -a strarr <<< "$str" 
echo "В строке ${#strarr[*]} есть слова. 
for val in "$[strarr[@]]"; 
do
  printf "Şval\n"
done

 

Пример 02: IFS разделяет строку с использованием символа в качестве значения

В вышеупомянутом примере вы видели, как разбить строковые переменные на части, используя пробел в качестве разделителя IFS. Теперь мы будем использовать символ для разделения строки с помощью разделителя IFS. Откройте командный терминал и создайте новый файл bash «file2.sh» в домашнем каталоге системы Linux, используя команду touch следующим образом:

$ touch file2.sh

 

Откройте домашний каталог вашей системы Linux. Вы найдете в нем свой недавно созданный файл. Откройте только что созданный файл и напишите представленный ниже код на bash. В строке 3 мы инициировали оператор «echo» для печати строки. Следующая строка считывает данные, введенные пользователем в терминале с использованием ключевого слова read. Затем мы определили разделитель «IFS» и установили запятую «,» в качестве его символьного значения. Другой оператор «read» был определен для чтения и сохранения значений, разделенных запятыми, в строке, которая вводится пользователем в массив «strarr». Наконец, мы инициировали три оператора echo для печати значений разделения, разделенных запятыми, в виде переменных, как показано на изображении. Сохраните и закройте этот файл.

*file2.sh

#!/bin/bash

echo "Введите свое имя, фамилию и должность.
read string
IFS=
read -a strarr <<< "Şstring"
echo "Имя : ${strarr[0]}
echo "Фамилия : ${strarr[1]}"
echo "Должность : ${starr[2]]

 

Теперь нам нужно запустить этот сохраненный файл. Выполните показанную ниже команду bash, за которой следует имя файла в терминале, чтобы сделать это. Вы должны добавить строковое значение, которое должно содержать запятую «,» внутри значений, и нажать кнопку Enter. Теперь ваши данные сохранены в массиве strarr. Последние три строки показывают вывод операторов «echo». Как видите, каждый текст до и после запятой использовался как отдельное значение.

$ bash file2.sh

 

Пример 03: IFS Split String

Мы сделали оба предыдущих примера в файле bash. Теперь у нас будет иллюстрация использования «IFS» без создания файла bash. Для этого откройте командную оболочку. Во-первых, нам нужно создать строку «var» со строковым значением в ней. Эта строка содержит запятые после каждого слова.

$ var="Привет, мне 25 лет".

 

Читать  Как считать файлы в каталоге в Linux

Затем инициализируйте переменную IFS с помощью символьной запятой в качестве значения разделителя.

$ IFS=,

 

После этого мы использовали цикл «for» для поиска каждого слова из переменной «var», разделенного запятой-разделителем IFS, и печати его с помощью оператора «echo».

for i in $var
>do
>echo [$i]
>Done

 

У вас будет результат ниже. Он покажет каждое слово строковой переменной «var» на новой строке из-за запятой-разделителя «», используемой в качестве символа разделения.

 

Заключение:

В этой статье вы узнали о различных методах разделения входных значений в bash, например, с помощью пробела или символа. Мы надеемся, что иллюстрации, упомянутые в этой статье, помогут вам разбить каждую строку с помощью разделителя IFS.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Поделиться в соц. сетях:
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
1 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Маршал

Круто!

Читайте также

1
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close