그래서 입력 줄을 뒤집기 위해 이 스크립트를 발견했습니다.
#! /bin/bash
input="${1}"
reverse=""
len=${#input}
for(( i=${len}-1; i>=0; i-- ))
do
reverse="$reverse${input:${i}:1}"
done
echo "$reverse"
#input과 for 루프의 기능을 설명할 수 있는 사람이 있나요?
답변1
단순화하면 스크립트는 다음과 같아야 합니다.
#! bin/bash
input="${1}" reverse=""
for (( i=0; i<${#input}; i++ ))
do reverse="${input:${i}:1}$reverse"
done
echo "$reverse"
위의 코드를 :이라는 파일에 넣고 script.sh
실행을 허용한다고 가정해 보겠습니다 chmod u+x script.sh
. 그러면 다음 명령이 작동합니다.
$ ./script.sh 0123456789
9876543210
${#input}의 값은 입력된 문자의 길이입니다.
루프는 처음부터 끝까지 문자 단위로 진행됩니다.
각 문자를 선택하기 위해 스크립트는 "하위 문자열 확장"이라는 bash 도구를 사용합니다.
인용문 man bash
( 을 입력하여 액세스할 수도 있음 man bash
):
${매개변수:오프셋:길이}
하위 문자열 확장. offset으로 지정된 문자부터 인수의 최대 문자 길이까지 확장됩니다.
이는 i
해당 위치의 각 문자를 차례로 선택하여 변수에 대한 문자열을 다시 생성하는 것을 의미합니다 reverse
.
하지만 이를 수행하기 위해 루프나 화려한 코딩이 필요하지 않습니다. 이 간단한 줄은 똑같은 일을 할 것입니다:
$ echo "0123456789" | rev
9876543210
답변2
답변3
${#input}
는 의 문자 수입니다$input
. 때로는 무언가를 볼 때#
"숫자"를 생각해야 합니다.- 정말 뻔하지 않은가? 루프는
for
끝에서 처음까지 한 번에 한 문자씩 반복됩니다.$input
예를 들어 is 인 경우$input
루프unix tm
는for
,m
,t
,x
,i
및n
문자 를 검색하여u
추가합니다reverse
. - 첫 번째 줄은 다음과 같아야 합니다 .
#!/bin/bash
You are Missing one 입니다./
답변4
간단합니다 getopts
. 을 사용하면 문자열을 문자별로 나누고 출력 변수에서 해당 문자를 읽을 수 있는 API를 제공하는 것뿐입니다.
input='some string or something' output= OPTIND=1
while getopts : na "-$input"
do output=$OPTARG$output
done; echo "$output"
gnihtemos ro gnirts emos
아무것도 계산하거나 색인을 생성할 필요가 없습니다. getopts
완료 후 즉시 반환하더라도 루프가 종료됩니다. 그것은 간단합니다.