tcpdump :почему номер ack больше, чем номер sack?

Да, PATHможет содержать символы новой строки (даже в древней системе Unix ).

Что касается разделения любой строки в оболочке, единственный переносимый способ сделать это — IFS. Однако вы можете использовать IFS=:; set -f; set -- $PATHили передать его функции вместо цикла с for.

С помощью bashвы также можете "читать" строку в массив :

xtra=$'some\nother\nplace\n\n'; PATH="$PATH:$xtra"
mapfile -td: path < <(printf %s "$PATH")
printf '<%s>\n' "${path[@]}"

Но использование массивов обычно не является хорошей идеей, потому что они не могут быть прозрачно сохранены в переменных окружения или переданы внешним командам в качестве одного аргумента.

Обратите внимание, что IFSбудет завершать поля, а не разделять их (примерно так же, как \nв конце файла не будет рассматриваться как пустая строка программами, читающими файл строка -на -строка ); если это не то, что ожидается, и вы действительно хотите создать дополнительное пустое поле в конце при разбиении строки, которая заканчивается символом из IFS, вы должны присоединиться к пустой строке после переменной, которая подлежит разбиению на слова:

(P=/bin:; IFS=:; printf '<%s>\n' $P"")
</bin>
<>

Алгоритм разделения слов также будет игнорировать пробельные символы в начале строки, если эти пробельные символы являются частью IFS.Если вам нужно дополнительное поле для начального пробела, вы также должны добавить пустую строку перед переменной:

(P='   foo : bar  '; IFS=': '; set -f; set -- $P; printf '<%s>\n' "$@")
<foo>
<bar>

(P='   foo : bar  '; IFS=': '; set -f; set -- ""$P""; printf '<%s>\n' "$@")
<>
<foo>
<bar>
<>
2
22.02.2021, 08:50
0 ответов

Теги

Похожие вопросы