Intereting Posts
Команда для печати имени SSID, к которому я подключен скачать pdf-файлы с помощью curl Неважно, какое состояние я устанавливаю, если оба местоположения находятся в одном и том же часовом поясе Как Fstab выполняет noexec параметр влияет на акции samba Не удается запустить команду в виде www-данных, используя su bash scripting – читать архив из stdin Остановить Kodi от запуска экземпляра Pulseaudio Предоставить конкретное разрешение пользователя, чтобы убить других пользователей с помощью логина? Что происходит с пакетами «* -git date» в AUR? Как запустить демон talkd? Раздел процессора в vmstat Включение / выключение управляющего гнезда OpenSSH Как выполняется фактическое внедрение cron и позволяет запускать скрипты вовремя? История-поиск в zsh работает только для команд? Инструмент, подобный Grep, для отображения определенной области текста относительно шаблона

Разбить строку без разделителя и сохранить ее в массиве

Я хотел бы разделить три буквы, такие как WER на три независимых буквы. следующее:

 W = array[0] E = array[1] R = array[2] 

Я попробовал команду

WER | cut -c1 WER | cut -c1 но я не смог сохранить новую строку W в переменной.

Я старался

set var1 = WER | cut -c1 set var1 = WER | cut -c1 и это не сработало.

В bash :

 str=WER a=( "${str:0:1}" "${str:1:1}" "${str:2:1}" ) 

или, как цикл над произвольно длинной строкой:

 str=WER a=() for (( i = 0; i < ${#str}; ++i )); do a+=( "${str:i:1}" ) done 

${parameter:offset:length} - это расширение подстроки bash , которое приведет к увеличению length символа строки $parameter из смещения offset .

Это проще с zsh :

 string=WER array=(${(s::)string}) printf '<%s>\n' $array 

(обратите внимание, что массив zsh начинается с 1, как и в большинстве других оболочек, а не с 0, как в bash / ksh ).

Или с fish (массивы также начинаются с 1):

 set string WER set array (string split '' $string) printf '<%s>\n' $array 

(предполагается, что $string не содержит символов новой строки).

POSIXly (shell POSIX имеет один массив: $@ (также начинается с 1: $1 )), поэтому также будет работать в bash или zsh и стандартном sh вашей системы:

 string=WER set -- while [ -n "$string" ]; do tmp=${string#?} set -- "$@" "${string%%"$tmp"}" string=$tmp done printf '<%s>\n' "$@" 

С помощью csh или tcsh который вы, похоже, используете:

 set string = WER set array = "`printf '%s\n' $string:q | fold -w1`" printf '<%s>\n' $array:q 

Как и для fish , он также предполагает, что строка не содержит символов новой строки. Также обратите внимание, что некоторые реализации fold будут складываться на байтах вместо символов, что означало бы, что оно не будет работать должным образом, если строка содержит многобайтовые символы.