쉘의 가변 보간


103

라는 변수가 filepath=/tmp/name있습니다.

변수에 액세스하려면 다음과 같이 할 수 있습니다. $filepath

내 쉘 스크립트에서 이와 같은 작업을 시도했습니다 (백틱이 의도되었습니다)

`tail -1 $filepath_newstap.sh`

이 줄은 실패합니다. 변수가 호출되지 않았기 때문입니다. $filepath_newstap.sh

_newstap.sh변수 이름에 어떻게 추가 합니까?

백틱은 식 평가를위한 것입니다.

답변:


186

사용하다

"$filepath"_newstap.sh

또는

${filepath}_newstap.sh

또는

$filepath\_newstap.sh

_식별자에서 유효한 문자입니다. Dot은 그렇지 않으므로 쉘은 $filepath_newstap.

set -u정의되지 않은 변수를 참조 할 때 오류와 함께 셸을 종료하는 데 사용할 수 있습니다 .


7
set -u정의되지 않은 변수를 참조하면 스크립트가 중단되는 원인 을 언급 할 수도 있습니다 .
tripleee 2013-07-12

1
사용 ${}과 큰 따옴표 의 차이점은 무엇입니까 ? 다른 것보다 하나를 선호해야합니까?
user31389 2010 년

3
@ user31389 : 차이점은 변수에 공백이 포함 된 경우 큰 따옴표 만 작동한다는 것입니다.
choroba

@choroba 변수 이름 또는 변수 ?
Joshua Pinter

15

변수 이름을 중괄호로 묶습니다.

`tail -1 ${filepath}_newstap.sh`

1
큰 따옴표가 필요하지 않습니까?
michaelsnowden

@michaelsnowden 반드시 그런 것은 아닙니다. 안전을 위해 예, 그러나 질문은 공백이없는 경로를 명시 적으로 명시했으며 문제가 의도 된대로 $filepath_newstap.sh해석되지 ${filepath_newstap}.sh않고 ${filepath}_newstap.sh문제가 해결 될 것이라고 제안했습니다.

@michaelsnowden 그것은 내가 아직 알지 못하는 것을 말하지 않습니다. 왜 큰 따옴표가 필요하다고 생각하십니까?

당신은 문자열 보간을 위해 노력하고, 당신은 그것에 대해 따옴표가 필요하기 때문에
michaelsnowden

@michaelsnowden 매개 변수 확장은 큰 따옴표 또는 완전히 따옴표 외부에서 발생합니다. 매개 변수 확장을 방지하는 유일한 방법은 작은 따옴표 또는 따옴표로 구분 된 문자 또는 식별자에서 유효하지 않은 기타 문자입니다. 예를 들어, "$filepath"_foo${filepath}_foo둘 다 /tmp/name_foo. 그러나 '$filepath'_foo, "$"filepath_foo그리고 $"filepath"_foo완전히 모든 피하기 확장 할 것이다. 이것이 환경 변수 export PATH=$PATH:$addpath에 추가 :$addpath(매개 변수 확장이 적용됨)하는 이유 PATH입니다.

3

Bash에서 :

tail -1 ${filepath}_newstap.sh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.