bash에서 단일 명령을 사용하여 셸 변수에 기본값 할당
bash(3.00) 셸 스크립트의 변수에 대한 많은 테스트가 있습니다.변수가 설정되어 있지 않으면 다음과 같은 기본값이 할당됩니다.
if [ -z "${VARIABLE}" ]; then
FOO='default'
else
FOO=${VARIABLE}
fi
한 줄에 이 작업을 수행할 때 다음과 같은 3진 연산자와 유사한 구문이 있는 것으로 기억합니다.
FOO=${ ${VARIABLE} : 'default' }
(그게 안 된다는 건 알지만...)
내가 미친 걸까, 아니면 그런 게 존재하는 걸까?
사실 네가 올린 글이랑 아주 비슷해이를 위해서는 Bash 파라미터 확장이라고 하는 것을 사용할 수 있습니다.
할당된 값을 가져오려면 또는default
누락된 경우:
FOO="${VARIABLE:-default}" # If variable not set or null, use default.
# If VARIABLE was unset or null, it still is after this (no assignment done).
또는 할당하기 위해default
로.VARIABLE
동시에:
FOO="${VARIABLE:=default}" # If variable not set or null, set it to default.
명령줄 인수의 경우:
VARIABLE="${1:-$DEFAULTVALUE}"
에 할당됩니다.VARIABLE
스크립트에 전달된 첫 번째 인수 값 또는 값DEFAULTVALUE
만약 그런 주장이 통과되지 않았다면.따옴표는 글러빙과 단어 분할을 방지합니다.
변수가 같으면
: "${VARIABLE:=DEFAULT_VALUE}"
할당하다DEFAULT_VALUE
로.VARIABLE
정의되지 않은 경우.
Bash 매뉴얼의 섹션 3.5.3 "쉘 매개 변수 확장"을 참조하십시오.
질문에 대한 답변과 모든 변수 대체에 대한 답변
echo "${var}"
echo "Substitute the value of var."
echo "${var:-word}"
echo "If var is null or unset, word is substituted for var. The value of var does not change."
echo "${var:=word}"
echo "If var is null or unset, var is set to the value of word."
echo "${var:?message}"
echo "If var is null or unset, message is printed to standard error. This checks that variables are set correctly."
echo "${var:+word}"
echo "If var is set, word is substituted for var. The value of var does not change."
달러 기호와 나머지 표현식 사이에 \를 넣으면 표현식 전체를 벗어날 수 있습니다.
echo "$\{var}"
다른 변수의 값을 기본값처럼 사용할 수도 있습니다.
파일을 가지고 있다defvalue.sh
#!/bin/bash
variable1=$1
variable2=${2:-$variable1}
echo $variable1
echo $variable2
달려../defvalue.sh first-value second-value
산출량
first-value
second-value
실행하다./defvalue.sh first-value
산출량
first-value
first-value
FWIW는 다음과 같은 오류 메시지를 제공할 수 있습니다.
USERNAME=${1:?"Specify a username"}
다음과 같은 메시지가 표시되고 코드 1로 종료됩니다.
./myscript.sh
./myscript.sh: line 2: 1: Specify a username
모든 것의 보다 완전한 예를 다음에 나타냅니다.
#!/bin/bash
ACTION=${1:?"Specify 'action' as argv[1]"}
DIRNAME=${2:-$PWD}
OUTPUT_DIR=${3:-${HOMEDIR:-"/tmp"}}
echo "$ACTION"
echo "$DIRNAME"
echo "$OUTPUT_DIR"
출력:
$ ./script.sh foo
foo
/path/to/pwd
/tmp
$ export HOMEDIR=/home/myuser
$ ./script.sh foo
foo
/path/to/pwd
/home/myuser
$ACTION
첫 번째 인수 값을 사용하여 비어 있는 경우 종료합니다.$DIRNAME
두 번째 인수입니다.기본값은 현재 디렉토리로 설정됩니다.$OUTPUT_DIR
세 번째 인수 또는$HOMEDIR
(정의되어 있는 경우), 그렇지 않은 경우/tmp
OS X에서는 동작합니다만, 휴대성이 좋은 것은 아닙니다.
3.5.3(쉘 매개 변수 확장)에서 여기를 참조하십시오.
그래서 당신의 경우
${VARIABLE:-default}
다음과 같이 기본값을 체인할 수 있습니다.
DOCKER_LABEL=${GIT_TAG:-${GIT_COMMIT_AND_DATE:-latest}}
즉,$GIT_TAG
존재하지 않습니다.테이크$GIT_COMMIT_AND_DATE
- 이것이 존재하지 않는 경우,"latest"
다음으로, 「만약」구조를 보다 간결하게 표현하는 방법이 있습니다.
FOO='default'
[ -n "${VARIABLE}" ] && FOO=${VARIABLE}
여기 예가 있습니다.
#!/bin/bash
default='default_value'
value=${1:-$default}
echo "value: [$value]"
이 파일을 script.sh로 저장하고 실행 파일로 만듭니다.가차없이 그것을 실행하다.
./script.sh
> value: [default_value]
param으로 실행하다.
./script.sh my_value
> value: [my_value]
if-then-else에 1개의 라이너를 원하는 경우 다음과 같이 다시 쓰는 것을 고려해 보십시오.
if [ -z "${VARIABLE}" ]; then
FOO='default'
else
FOO=${VARIABLE}
fi
세미콜론 포함:
if [ -z ${VARIABLE} ]; then FOO=`default`; else FOO=${VARIABLE}; fi
는, 를, 를, 를, 를, 를, 습, 습, 습을 수 있다.if-then-else-fi
다음과 같은 부울 연산자를 사용하는 경우 키워드를 지정합니다.
[ -z "${VARIABLE}" ] && FOO='default' || FOO=${VARIABLE}
일반화하면 부울 연산자 패턴은 다음과 같습니다.
conditional && then_command || else_command
언급URL : https://stackoverflow.com/questions/2013547/assigning-default-values-to-shell-variables-with-a-single-command-in-bash
'programing' 카테고리의 다른 글
Swift 어레이 할당에 일관성이 없는 이유(레퍼런스나 딥 카피 모두)가 있습니까? (0) | 2023.04.17 |
---|---|
셸 스크립트의 YYY-MM-DD 형식 날짜 (0) | 2023.04.17 |
코드 배후에 있는 콜명령어 (0) | 2023.04.17 |
xlwings 및 python을 사용하여 워크시트 복사 (0) | 2023.04.17 |
데이터그램 열 가시성 MVVM 바인딩 (0) | 2023.04.17 |