Это немного сложновато, но я думаю, что это будет работать в любой оболочке, совместимой с posix. Я попробовал это в dash
, но у меня нет удобного для проверки устройства busybox.
var='ab * cd'
tmp="$var" # The loop will consume the variable, so make a temp copy first
while [ -n "$tmp" ]; do
rest="${tmp#?}" # All but the first character of the string
first="${tmp%"$rest"}" # Remove $rest, and you're left with the first character
echo "$first"
tmp="$rest"
done
Выход:
a
b
*
c
d
Обратите внимание, что двойные кавычки вокруг правой части назначений не нужны; Я просто предпочитаю использовать двойные кавычки вокруг всех расширений, а не пытаться отследить, где можно их оставить. С другой стороны, двойные кавычки в [ -n "$tmp" ]
абсолютно необходимы, а внутренние двойные кавычки в first="${tmp%"$rest"}"
необходимы, если строка содержит «*».