Bash 스크립트 역방향 라인

Bash 스크립트 역방향 라인

그래서 입력 줄을 뒤집기 위해 이 스크립트를 발견했습니다.

#! /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

${#str}$str 값의 길이입니다. 바라보다쉘 매개변수 확장bash 매뉴얼에서.

for ((i=j-1; i>=0; i--))bash의 산술 구문을 사용하는 C와 유사한 for 루프입니다. 바라보다루프 구조설명서에

답변3

  1. ${#input}는 의 문자 수입니다 $input. 때로는 무언가를 볼 때 #"숫자"를 생각해야 합니다.
  2. 정말 뻔하지 않은가? 루프는 for끝에서 처음까지 한 번에 한 문자씩 반복됩니다. $input예를 들어 is 인 경우 $input루프 unix tmfor, m, t, , x, in문자 를 검색하여 u추가합니다 reverse.
  3. 첫 번째 줄은 다음과 같아야 합니다 . #!/bin/bashYou 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완료 후 즉시 반환하더라도 루프가 종료됩니다. 그것은 간단합니다.

관련 정보