변수 확장에서 콜론 사용

변수 확장에서 콜론 사용

오래된 쉘 스크립트를 검토 중입니다. 제가 이해할 수 없는 두 가지가 있습니다.

rm /data/log || true

value=$(cat /datafile)
if [ ${value: -1} ==  0 ] 
 then echo 'do'
else echo 'dont'
 fi
  1. value: -1- 이게 실제로 뭐하는 거죠?
  2. rm /data/log || true- ||true이게 뭐 하는 거야?

답변1

${value: -1}다음으로 확장마지막 문자가변 콘텐츠.

${value:-1}다른에서 ${value: -1}!

인용하다쉘 매개변수 확장매뉴얼에서:

  1. ${value:-1}변수의 내용으로 확장 value되거나, 변수가 설정되지 않았거나 비어 있는 경우 문자열 "1"로 확장됩니다.

  2. ${value: -1}${var:offset:length}변수 내용의 부분 문자열을 추출하는 형식의 약어입니다. 오프셋은 -1"문자열 끝에서 한 문자"를 의미합니다. 이 :length부분이 누락되어 offset문자열 끝 부분에서 하위 문자열을 가져옵니다.

    설명서에는 다음과 같이 나와 있습니다.

    ':-' 확장과의 혼동을 피하기 위해 음수 오프셋은 콜론에서 최소한 하나의 공백으로 구분되어야 합니다.

답변2

rm /data/log || true(내 생각에는) 명령이 오류 상태로 종료될 때 스크립트 가 set -e. 이 스크립트의 작성자는 분명히 플래그 set -e에 대해 몰랐습니다 .-frm

${value: -1}오타일 수도 있습니다. null이거나 설정되지 않은 경우 ${value:-1}변수 확장에 대한 기본값을 제공 해야 합니다 (-1이 아닌 1, 이는 -구문의 일부임).:-value

이것이 실제로 그렇다면 ${value: -1}Glenn Jackman의 답변을 참조하여 실제로 의미하는 바를 확인하십시오.

답변3

bash(1)에서: ${parameter:-word}는 기본값을 사용합니다. 인수가 설정되지 않거나 비어 있으면 단어의 확장이 대체됩니다. 그렇지 않으면 매개변수 값이 대체됩니다.

|| true명령이 true를 반환하는지 확인하세요. ||단락 OR 연산자입니다. 이전 명령이 false를 반환하면 다음 명령이 실행되고 반환 값이 사용됩니다.

관련 정보