WER
세 글자를 세 글자 로 나누고 싶습니다 . 다음과 같이:
W = array[0]
E = array[1]
R = array[2]
나는 명령을 시도했다
WER | cut -c1
W
하지만 새 문자열을 변수에 저장할 수는 없습니다 .
나는 노력했다
set var1 = WER | cut -c1
하지만 작동하지 않습니다.
답변1
존재하다 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
답변2
다음을 사용하는 것이 더 쉽습니다 zsh
.
string=WER
array=(${(s::)string})
printf '<%s>\n' $array
(배열 인덱싱은 / 처럼 0 zsh
이 아닌 대부분의 다른 쉘처럼 1에서 시작합니다 .)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
for 와 마찬가지로 fish
문자열에 개행 문자가 포함되어 있지 않다고 가정합니다. 또한 일부 fold
구현에서는 문자가 아닌 바이트 단위로 접힐 수 있습니다. 즉, 문자열에 멀티바이트 문자가 포함되어 있으면 올바르게 작동하지 않습니다.