변수 확장에서 콜론의 목적

변수 확장에서 콜론의 목적

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

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} 기본값을 사용합니다. 매개변수가 설정되지 않거나 null이면 단어의 확장이 대체됩니다. 그렇지 않으면 매개변수 값이 대체됩니다.

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

관련 정보