이 bash 구문은 무엇을 의미합니까?
이는 ETL_PORT 변수가 설정된 경우 ETL_PORT가 되고, 그렇지 않으면 설정되지 않은 경우 기본값이 6090이 된다는 의미입니까?
ETL_PORT="${ETL_PORT:-6090}"
답변1
호출 시 변수가 설정되지 않은 경우 구문은 ${var:-val}
기본값을 사용합니다. 이는 많은 편리한 매개변수 확장 중 하나일 뿐입니다. 다음과 같은 유용한 치트 시트를 생성하는 스크립트가 있습니다.val
var
${V} Base string |reallyextremelylongfilename.ext
--- Default substitutions ---
${nullvar} Provided example case |
${#nullvar-def} Default value if unset or null |def
${#nullvar:-def} Default value if unset |def
--- Default assignments ---
${1} Provided example case |
${$1=def} Default value if unset or null |def
${$1:=def} Default value if unset |def
--- String metadata ---
${#V} String length |31
--- Substring extraction ---
${V:6} Substring from position |extremelylongfilename.ext
${V:6:9} Substring with length from pos. |extremely
--- Substring deletion ---
${V#*a} Delete shortest prefix match |llyextremelylongfilename.ext
${V##*a} Delete longest prefix match |me.ext
${V%e*} Delete shortest suffix match |reallyextremelylongfilename.
${V%%e*} Delete longest suffix match |r
--- Substring replacement ---
${V/long/short} Replace first match |reallyextremelyshortfilename.ext
${V/#r*a/REA} Replace prefix match |REAme.ext
${V/%.e*/.dat} Replace suffix match |reallyextremelylongfilename.dat
${V//e/II} Replace all matches |rIIallyIIxtrIImIIlylongfilIInamII.IIxt
--- Other handy things ---
${V?Message} exit 1 with 'Message' output if V is not set or is null
${V:?Message} exit 1 with 'Message' output if V is not set
${V+Value} If V is set, use 'Value', otherwise null