이 bash 구문은 무엇을 의미합니까? ETL_PORT="${ETL_PORT:-6090}" [중복]

이 bash 구문은 무엇을 의미합니까? ETL_PORT="${ETL_PORT:-6090}" [중복]

이 bash 구문은 무엇을 의미합니까?

이는 ETL_PORT 변수가 설정된 경우 ETL_PORT가 되고, 그렇지 않으면 설정되지 않은 경우 기본값이 6090이 된다는 의미입니까?

ETL_PORT="${ETL_PORT:-6090}"

답변1

호출 시 변수가 설정되지 않은 경우 구문은 ${var:-val}기본값을 사용합니다. 이는 많은 편리한 매개변수 확장 중 하나일 뿐입니다. 다음과 같은 유용한 치트 시트를 생성하는 스크립트가 있습니다.valvar

${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

관련 정보