Использовать выход, но не закрывать терминал в сценарии bash

С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 (оболочка 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будут свертываться по байтам вместо символов, что означает, что это не будет работать должным образом, если строка содержит многобайтовые символы -.

-4
15.06.2021, 11:39
1 ответ

После 1,5 минут исследований я могу ответить сам себе.

Решение состоит в том, чтобы использовать return вместо выхода. Таким образом, выход из функции не закрывает терминал, он оставляет сеанс оболочки открытым.

3
28.07.2021, 11:24

Теги

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