Вы можете выполнить grep один раз и дважды разделить, используя замену строки оболочки:
NAME=$(grep "$customer_id" customer-info | cut -f5,6 -d,)
FIRST_NAME=${NAME%,*}
LAST_NAME=${NAME#*,}
Или, с bash, используя подстановку процесса:
IFS=, read FIRST_NAME LAST_NAME < <(grep "$customer_id" customer-info | cut -f5,6 -d,)
read
разделит ввод на IFS
и назначит первое значение на FIRST_NAME
, а остальные на LAST_NAME
. Использование подстановки и перенаправления процесса < <(...)
позволяет передать вывод grep... | cut...
в read
без использования подоболочки.
https://en.wikipedia.org/wiki/Whitespace_character
In computer programming, whitespace is any character or series of characters that represent horizontal or vertical space in typography
Думаю, вы имеете в виду использование командной строки:
In commands processed by command processors, e.g., in scripts and typed in, the space character can cause problems as it has two possible functions: as part of a command or parameter, or as a parameter or name separator. Ambiguity can be prevented either by prohibiting embedded spaces, or by enclosing a name with embedded spaces between quote characters.
Пробел как разделитель параметров:
command arg1 arg2
Пробел как часть строки (одиночный параметр для команды):
command "arg with spaces"
В этом контексте нет такого понятия, как «пустой». Все, что у вас есть, это символы и некоторые символы, которые на самом деле не печатают ничего видимого для вас в обычном тексте. Впрочем, все выражается в характерах, да. В ASCII довольно много непечатаемых символов -, вы можете найти полный список здесь:https://web.itu.edu.tr/sgunduz/courses/mikroisl/ascii.html. Те, с которыми вы, скорее всего, столкнетесь в текстовых файлах, — это различные пробельные символы,:
\t
\n
\r
И реже:
\a
\b
\v
\f
У вас также есть NULL (\0
), который не печатается -, но не отображается в текстовых файлах, а также специальные escape-символы(\e
или^[
)и Control -Z (^Z
). но, опять же, не совсем в текстовых файлах.
Соответствующие ссылки
Таким образом, "пробел" может быть пробелом, табуляцией или другим пробельным символом. Или, если вы работаете с Unicode, а не с ASCII, у вас есть и другие странности. Но независимо от того, что у вас есть, они будут персонажами. Когда вы видите пробелы в тексте, компьютер видит какой-то символ. «Пробел» никогда не означает отсутствие символа, это всегда наличие непечатаемого -символа.
Поскольку ваш тег указывает на «Регулярное выражение», я предполагаю, что вы имеете в виду классы символов POSIX [:blank:]
и [:space:]
.
Эта обзорная таблица показывает, что [:blank:]
является подмножеством[:space:]
:
[:space:]
содержит все, что обычно обозначается как «пробелы», т.е. «пробел» (символ \x20
, генерируемый при нажатии клавиши «пробел» ), горизонтальная табуляция, вертикальная табуляция, перевод страницы и т.д.[:blank:]
содержит только те символы, которые создают «пустой пробел» в пределах одной строки , то есть «пробел» и горизонтальную табуляцию \t
.(*)И да, в контексте компьютерного ввода все это символы, и поэтому их также следует рассматривать как символы при разработке регулярного выражения.
ОбновлениеЗдесь аналогичное обсуждение.
(*)Обратите внимание, :, как указал Stéphane Chazelaz, существуют реализации на основе BSD -, где [:blank:]
также может содержать вертикальную табуляцию и перевод страницы.
ДА, если вы подчеркнете пробел, то это будет NULL, в противном случае пробел и пробел будут одинаковыми. Более того, пробел, пробел и табуляция - это символы, определенные системой ASCII или Unicode. пробел[0x00], пробел[0x20], вкладка[0x09]