programing

bash 기본값 할당

topblog 2023. 4. 18. 21:41
반응형

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에서ifcondition 필드, 트리거 일치 및 보고서 일치 결과.이렇게 하면 즉시 할당하고 적절한 액션을 트리거할 수 있습니다.

언급URL : https://stackoverflow.com/questions/4437573/bash-assign-default-value

반응형