
나는 읽었다"리눅스 성경 10판",7장: 간단한 쉘 스크립트 작성, 149페이지, "Bash의 매개변수 확장" 단락.
${var:-value}
— 변수가 설정되지 않았거나 비어 있으면 값으로 확장합니다.${var#pattern}
- var 값의 시작 부분에서 가장 짧은 패턴 일치를 자릅니다.${var##pattern}
- var 값의 시작 부분부터 가장 긴 패턴 일치를 가져옵니다.${var%pattern}
— var 값의 끝에서 가장 짧은 패턴 일치를 자릅니다.${var%%pattern}
- var 값의 끝에서 가장 긴 패턴 일치를 자릅니다.
어떻게 설명해주세요.가장 길다/가장 짧다일치 항목이 계산되나요? 오른쪽에서 왼쪽으로 아니면 그 반대인가요?
또한 아래 코드의 작동 방식과 출력 계산 방법을 설명해 주세요.
MYFILENAME=”/home/digby/myfile.txt”—Sets the value of MYFILENAME
FILE=${MYFILENAME##*/}—FILE becomes "myfile.txt"
DIR=${MYFILENAME%/*}—DIR becomes "/home/digby"
NAME=${FILE%.*}—NAME becomes "myfile"
EXTENSION=${FILE##*.}—EXTENSION becomes "txt"
감사해요.
답변1
정면에서 잘라낸 "#" 케이스부터 시작하겠습니다. 예를 들어 문자열을 문자열("0개 이상의 문자" 뒤에 마침표가 있음을 의미)과 일치시키는 myfile.tar.gz
경우 두 가지 일치 항목이 있습니다: 및 . 이것*.
myfile.
myfile.tar.
가장 짧은일치하는 내용은 다음과 같습니다.
${MYFILENAME#*.} # ie myfile.
결과는 다음과 같습니다: tar.gz
. 이것가장 긴일치하는 내용은 다음과 같습니다.
${MYFILENAME##*.} # ie myfile.tar.
결과는 다음과 같습니다: gz
.
이제 "%"의 경우를 고려해보자. 여기서 일치 항목은 문자열의 오른쪽에 있습니다. 이번에는 .*
뒤에 문자가 있는(또는 없는) 지점을 찾고 있습니다. 가장 짧은 일치 항목이 .gz
가장 긴 항목 이므로 .tar.gz
다음과 같은 결과를 얻습니다.
${MYFILENAME%.*} # => myfile.tar
${MYFILENAME%%.*} # => myfile
다른 예는 이 점을 설명하기 위해 테마를 변형한 것입니다.
MYFILENAME=”/home/digby/myfile.txt”—Sets the value of MYFILENAME
FILE=${MYFILENAME##*/}—FILE becomes "myfile.txt"
DIR=${MYFILENAME%/*}—DIR becomes "/home/digby"
NAME=${FILE%.*}—NAME becomes "myfile"
EXTENSION=${FILE##*.}—EXTENSION becomes "txt"
설명하다:
*/
처음부터 일치하는 가장 긴 문자열은 다음과 같습니다./home/digby/
/*
마지막에 일치하는 가장 짧은 문자열은 다음과 같습니다./myfile.txt
- 마지막에 .*와 일치하는 가장 짧은 문자열은 다음과 같습니다.
.txt
at the front is
"*.myfile.`과 일치하는 가장 긴 문자열