불행히도 변수를 {start..end}
범위 안에 넣을 수는 없습니다.
이 당신이 원하는 것을 : 그것은 다음 단계로 각 문자를 번역하는 tr
를 사용
until [[ $s == "_" ]]; do echo $s && s=$(tr "a-z" "b-z_" <<<$s); done
. "_"는 "z"뒤의 문자입니다. 예를 들어
:
$ s=t
$ until [[ $s == "_" ]]; do echo $s && s=$(tr "a-z" "b-z_" <<<$s); done
t
u
v
w
x
y
z
펄을 사용하여 괜찮다면, 당신이 사용할 수 있습니다 명령 줄에서 첫 번째 인수 사이에 목록을 만들 수
이
perl -le 'print for shift .. "z"' $s
그것은 ..
를 사용을 및 "z".
떠들썩한 파티에서 할 수있는 약간 더 난해한 방법은 다음과 같습니다
for
루프 형식 ASCII 문자 (122) 인 변수
$s
에 "Z"의 ASCII 문자 번호에서 진행
for ((i=$(LC_CTYPE=C printf '%d' "'$s"); i<=122; ++i)); do
printf "\\$(printf '%03o' $i)\n"
done
내부 지정자 인 printf
은 문자 수를 8 진수로 변환하며 최대 3 자까지 0으로 채 웁니다. printf
바깥 쪽은 이것을 이스케이프 시퀀스로 해석하여 문자를 인쇄합니다. ASCII 문자를 해당 값으로 변환하는 데 사용되는 코드는 Greg's wiki입니다.
물론 변수를 확장하는 데 eval
을 사용할 수 있습니다. 이점은 필요한 코드가 훨씬 짧아집니다. 그러나 스크립트에서 읽은 임의의 문자열을 실행하는 것은 틀림없이 약간의 보안 허점입니다.
이
$ s=t
$ eval echo {$s..z}
t u v w x y z
귀하의 예는 다음이된다 :
t
u
v
w
x
y
z
왜 단순한 작업을 수행합니까? ;) –