programing

조건의 Bash에서 "unary operator expected" 오류가 발생했습니다.

codeshow 2023. 4. 17. 22:10
반응형

조건의 Bash에서 "unary operator expected" 오류가 발생했습니다.

이 스크립트에 오류가 발생했습니다.

elif [ $operation = "man" ]; then
    if [ $aug1 = "add" ]; then         # <- Line 75
    echo "Man Page for: add"
    echo ""
    echo "Syntax: add [number 1] [number 2]"
    echo ""
    echo "Description:"
    echo "Add two different numbers together."
    echo ""
    echo "Info:"
    echo "Added in v1.0"
    echo ""
elif [ -z $aug1 ]; then
    echo "Please specify a command to read the man page."
else
    echo "There is no manual page for that command."
fi

다음의 에러가 표시됩니다.

calc_1.2: line 75: [: =: unary operator expected

항상 Bash를 사용할 것을 알고 있다면 double bracket 조건부 복합 명령어를 사용하는 것이 훨씬 쉽습니다.[[ ... ]]POSIX 호환 싱글브래킷 버전 대신[ ... ]. 내부[[ ... ]]복합, 단어 구분 및 경로 이름 확장은 단어에 적용되지 않으므로 신뢰할 수 있습니다.

if [[ $aug1 == "and" ]];

가치를 비교하다$aug1끈으로and.

사용하시는 경우[ ... ], 항상 다음과 같이 변수를 큰따옴표로 묶어야 합니다.

if [ "$aug1" = "and" ];

변수 확장을 인용하지 않고 변수가 정의되지 않았거나 비어있으면 범죄 현장에서 사라지고

if [ = "and" ];

이것은 유효한 구문이 아닙니다.(또, 에러 메세지가 다른 경우는, 에러 메세지가 표시됩니다.$aug1공백 문자 또는 셸 메타 문자를 포함합니다.)

모던[[operator에는 정규 표현 매칭을 포함한 기타 많은 기능이 있습니다.

이것을 찾는 데 시간이 걸렸지만, 공백 오류가 있는 경우에도 동일한 오류가 발생한다는 점에 유의하십시오.

[: =: unary operator expected

정답:

if [ "$APP_ENV" = "staging" ]

if ["$APP_ENV" = "staging" ]

항상 그렇듯이 설정-xdebug variable을 사용하면 다음 정보를 찾을 수 있습니다.

set -x

값을 할당해 보십시오.$aug1에 사용하기 전에if[]에러 메시지는 나중에 사라집니다.

문자열 비교를 사용하여 $operation과 같은 변수를 비교할 때 POSIX 접근법(단일 괄호)을 사용할 경우 $operation이 빈 문자열을 반환할 가능성을 남겨두지 않도록 하십시오.

[$operation == "man"] 및 [" "== "man" ] 모두 동일한 오류를 반환합니다. [: ==: 단항 연산자 예상됨

또한 위와 같이 이중 괄호를 사용하지 않는 한 = 연산자를 사용하면 안 됩니다.

참고 자료: https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

또한 이 오류는 공백일 수 있는 숫자 입력을 읽을 때도 발생할 수 있습니다(기본 옵션을 받아들이기 위해).

해결방법은 다음과 같은 구조화 하는 것입니다.if여러 조건이 있는 문과 빈 변수를 먼저 테스트합니다.

예를 들어 다음과 같습니다.

# sanitise input
var=$(echo $ans | tr -cd "[:digit:]")

if [ -z "$var" ] || [ "$var" -lt 1 ]; then
   do_something
fi

나는 이것을 해결해야 했다.unary operator expected에 발행하다.remove_old_pkgs()도우미 스크립트의abk를 참조해 주세요.

'6.4 Bash 조건식'도 참조해 주세요.

변수의 디폴트값을 설정할 수도 있기 때문에 1개의 프로세스 대신 2개의 프로세스("["는 실제로는 프로그램")를 사용할 필요가 없습니다.

이 구문은 ${VARILE:-default}입니다.

이 모든 것은 이 "기본값" 값이 "유효한" 값/콘텐츠와 구별되도록 생각해야 합니다.

어떤 이유로든 값이 있는지 확인할 수 없는 경우에는 "[-z $VARILE]; "변수를 채워야 합니다." 또는 "[!z $VARILE]; #모든 것이 정상이며 스크립트의 나머지 부분으로 진행됩니다."와 같이 단계를 추가해야 합니다.

언급URL : https://stackoverflow.com/questions/13617843/unary-operator-expected-error-in-bash-if-condition

반응형