
오래된 쉘 스크립트를 검토 중입니다. 나는 그 안에 두 가지를 이해할 수 없습니다.
rm /data/log || true
value=$(cat /datafile)
if [ ${value: -1} == 0 ]
then echo 'do'
else echo 'dont'
fi
value: -1
- 이게 실제로 뭘 하는 거죠?rm /data/log || true
- 이게 뭐||true
하는 거야?
답변1
${value: -1}
으로 확장됩니다.마지막 문자변수 내용 중.
${value:-1}
~이다다른에서 ${value: -1}
!
참조쉘 매개변수 확장설명서에서:
${value:-1}
변수 의 내용으로 확장되거나value
, 변수가 설정되지 않았거나 비어 있는 경우 문자열 "1"로 확장됩니다.${value: -1}
${var:offset:length}
변수 내용의 하위 문자열을 추출하는 형식 의 짧은 형식입니다 . 오프셋은-1
"문자열 끝에서 한 문자"를 의미합니다. 해당:length
부분이 누락되어 부분 문자열이offset
문자열의 끝까지 가져옵니다.설명서에는 다음과 같이 나와 있습니다.
':-' 확장과 혼동되지 않도록 음수 오프셋은 콜론과 최소한 하나의 공백으로 구분되어야 합니다.
답변2
rm /data/log || true
(내 겸손한 경험으로는) 스크립트가 set -e
. set -e
명령이 오류 상태로 종료될 때 쉘이 종료되도록 합니다. 스크립트 작성자 -f
는 rm
.
${value: -1}
아마도 오타 일 것입니다. 가 null이거나 설정되지 않은 경우 변수 확장에 대한 ${value:-1}
기본값(-1이 아닌 1, 구문 -
의 일부 )을 제공 해야 합니다 .:-
value
실제로 그렇다면 ${value: -1}
실제 의미에 대해서는 glenn jackman의 답변을 참조하십시오.
답변3
bash(1)에서: ${parameter:-word} 기본값을 사용합니다. 매개변수가 설정되지 않거나 null이면 단어의 확장이 대체됩니다. 그렇지 않으면 매개변수 값이 대체됩니다.
|| true
명령이 true를 반환하는지 확인하세요. ||
는 단락 OR 연산자로 앞의 명령이 false를 반환하면 뒤의 명령이 실행되고 반환 값이 사용됩니다.