아래와 같은 라이닝을 보고 정확한 사용법과 작동을 분석하는 데 약간의 시간을 투자했습니다. 예를 들어 설정되지 않은 경우 값을 다음 값으로 설정합니다.
export JDK_HOME=${JDK_HOME:-"/some/path/java-1.7"}
무언가를 검색할 때 ":-"와 같은 까다로운 텍스트가 표시되지 않습니다. 문서화된 유용한 한 줄짜리 유용한 목록이나 참조할 특정 매뉴얼 페이지가 있습니까?
답변1
문서 참조에 대한 다른 훌륭한 답변 외에도 저는 항상 Bash의 디버깅 도구를 사용하여 무슨 일이 일어나고 있는지 확인합니다.
다음과 같이 블록으로 래핑하여 관심 있는 명령을 활성화 및 비활성화할 수 있습니다.
$ set -x; command_to_watch; set +x
예
$ set -x; export JDK_HOME=${JDK_HOME:-"/some/path/java-1.7"}; set +x
+ export JDK_HOME=/some/path/java-1.7
+ JDK_HOME=/some/path/java-1.7
+ set +x
여기에서 변수가 $JDK_HOME
로 설정된 것을 볼 수 있습니다 /some/path/java-1.7
. 그러나 다른 값으로 설정하면 다음과 같습니다.
$ export JDK_HOME=/a/path
$ echo $JDK_HOME
/a/path
이 명령을 다시 실행하십시오.
$ set -x; export JDK_HOME=${JDK_HOME:-"/some/path/java-1.7"}; set +x
+ export JDK_HOME=/a/path
+ JDK_HOME=/a/path
+ set +x
아무것도 하지 않는 것을 볼 수 있습니다. 이는 변수가 이미 설정되어 있으면 이 명령이 해당 변수를 무시하고, 그렇지 않으면 값으로 설정한다는 것을 알려줍니다 /some/path/java-1.7
.
우리의 의심을 확인했습니다배쉬 매뉴얼 페이지:
${parameter:-word}
Use Default Values. If parameter is unset or null, the expansion of word
is substituted. Otherwise, the value of parameter is substituted.
답변2
Read 를 man bash
누른 다음 입력하세요 /Parameter Expansion
(정확히 이와 같이 앞에 슬래시가 붙습니다). 이 매뉴얼 페이지에서 관련 섹션을 검색합니다. 가능한 확장 수정자가 거기에 설명되어 있습니다.
답변3
나는 발견했다부록 B의 참조 카드~의고급 Bash 스크립팅 가이드굉장히 유용하다. 귀하의 예에 대한 관련 테이블은 다음과 같습니다표 B-4: 매개변수 대체 및 확장.