bash 기본값 할당
${parameter:=word} 기본값을 할당합니다.매개 변수가 설정되지 않았거나 null인 경우 매개 변수에 단어 확장이 할당됩니다.그런 다음 매개 변수 값이 대체됩니다.위치 파라미터 및 특수 파라미터는 이 방법으로 할당할 수 없습니다.
이 기능을 이용해서 글을 쓸 수 있을 것 같아서${LONG_VARIABLE_NAME:=hello}
길지 않고LONG_VARIABLE_NAME=${LONG_VARIABLE_NAME:-hello}
bash는 "hello"도 실행하려고 합니다.그 결과 명령어를 찾을 수 없습니다.그걸 피할 방법은 없나요?아니면 후자를 고집해야 할까요?assign default가 실제로 도움이 되는 예를 들어줄 수 있나요?
콜론 사용:
: ${A:=hello}
콜론은 아무것도 하지 않고 인수를 무시하는 null 명령어입니다.bash에 내장되어 있기 때문에 새로운 프로세스는 작성되지 않습니다.
예에 대해서는, http://www.tldp.org/LDP/abs/html/parameter-substitution.html 를 참조해 주세요.
${parameter-default}, ${parameter:-default}
파라미터가 설정되지 않은 경우 default를 사용합니다.콜 후에도 파라미터는 설정되지 않습니다.
두 형태 모두 거의 동일합니다.엑스트라:
는 파라미터가 선언된 경우에만 차이가 발생하지만 늘입니다.
unset EGGS
echo 1 ${EGGS-spam} # 1 spam
echo 2 ${EGGS:-spam} # 2 spam
EGGS=
echo 3 ${EGGS-spam} # 3
echo 4 ${EGGS:-spam} # 4 spam
EGGS=cheese
echo 5 ${EGGS-spam} # 5 cheese
echo 6 ${EGGS:-spam} # 6 cheese
${parameter=default}, ${parameter:=default}
매개 변수가 설정되지 않은 경우 매개 변수 값을 기본값으로 설정합니다.
둘 다 거의 같은 형태입니다.:는 파라미터가 선언되어 null인 경우에만 차이가 있습니다.
# sets variable without needing to reassign
# colons suppress attempting to run the string
unset EGGS
: ${EGGS=spam}
echo 1 $EGGS # 1 spam
unset EGGS
: ${EGGS:=spam}
echo 2 $EGGS # 2 spam
EGGS=
: ${EGGS=spam}
echo 3 $EGGS # 3 (set, but blank -> leaves alone)
EGGS=
: ${EGGS:=spam}
echo 4 $EGGS # 4 spam
EGGS=cheese
: ${EGGS:=spam}
echo 5 $EGGS # 5 cheese
EGGS=cheese
: ${EGGS=spam}
echo 6 $EGGS # 6 cheese
${parameter+alt_value}, ${parameter:+alt_value}
파라미터가 설정되어 있는 경우 alt_value를 사용하고, 그렇지 않은 경우 null 문자열을 사용합니다.콜 후에도 파라미터 값은 변경되지 않습니다.
둘 다 거의 같은 형태입니다.:는 파라미터가 선언되어 null인 경우에만 차이가 있습니다.
unset EGGS
echo 1 ${EGGS+spam} # 1
echo 2 ${EGGS:+spam} # 2
EGGS=
echo 3 ${EGGS+spam} # 3 spam
echo 4 ${EGGS:+spam} # 4
EGGS=cheese
echo 5 ${EGGS+spam} # 5 spam
echo 6 ${EGGS:+spam} # 6 spam
디폴트값 파라미터의 확장은 아래 예시와 같은 빌드스크립트에서 도움이 되는 경우가 많습니다.사용자가 스크립트를 그대로 호출하는 경우 perl은 내장되지 않습니다.사용자가 명시적으로 설정해야 합니다.WITH_PERL
"아니오" 이외의 값으로 설정합니다.
$ cat defvar.sh
#!/bin/bash
WITH_PERL=${WITH_PERL:-no}
if [[ "$WITH_PERL" != no ]]; then
echo "building with perl"
# ./configure --enable=perl
else
echo "not building with perl"
# ./configure
fi
Perl을 사용하지 않는 빌드
$ ./defvar.sh
not building with perl
Perl을 사용한 빌드
$ WITH_PERL=yes ./defvar.sh
building with perl
를 사용할 수도 있습니다.:=
한 번에 작업을 할당하고 결정하는 구성입니다.다음의 예를 검토해 주세요.
# Example of setting default server and reporting it's status
server=$1
if [[ ${server:=localhost} =~ [a-z] ]] # 'localhost' assigned here to $server
then echo "server is localhost" # echo is triggered since letters were found in $server
else
echo "server was set" # numbers were passed
fi
한다면$1
비어있지 않습니다.localhost
에 할당됩니다.server
에서if
condition 필드, 트리거 일치 및 보고서 일치 결과.이렇게 하면 즉시 할당하고 적절한 액션을 트리거할 수 있습니다.
언급URL : https://stackoverflow.com/questions/4437573/bash-assign-default-value
'programing' 카테고리의 다른 글
Swift에서 네임스페이스를 사용하는 방법 (0) | 2023.04.18 |
---|---|
iOS 스위프트UI: 프로그래밍 방식으로 보기 열기 또는 끄기 (0) | 2023.04.18 |
WPF DataTemplate에서 DataType 속성을 사용하려면 어떻게 해야 합니까? (0) | 2023.04.18 |
Swift에서 Int를 문자열로 변환 (0) | 2023.04.18 |
유형별로 WPF 컨테이너의 자식을 가져오려면 어떻게 해야 합니까? (0) | 2023.04.18 |