오래된 쉘 스크립트를 검토 중입니다. 제가 이해할 수 없는 두 가지가 있습니다.
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}는 기본값을 사용합니다. 인수가 설정되지 않거나 비어 있으면 단어의 확장이 대체됩니다. 그렇지 않으면 매개변수 값이 대체됩니다.
|| true
명령이 true를 반환하는지 확인하세요. ||
단락 OR 연산자입니다. 이전 명령이 false를 반환하면 다음 명령이 실행되고 반환 값이 사용됩니다.