조건의 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" ]
항상 그렇듯이 설정-x
debug 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
'programing' 카테고리의 다른 글
PowerShell 스크립트를 사용하여 EXE 파일 실행 (0) | 2023.04.17 |
---|---|
지정된 디렉토리에서 파일만 찾고 bash를 사용하여 하위 디렉토리를 무시하는 방법 (0) | 2023.04.17 |
여러 열에서 최소값을 선택하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.17 |
WPF DataGrid에서 붙여넣기 데이터를 복사할 때 OpenClipboard가 실패했습니다. (0) | 2023.04.17 |
Swift에서 ViewController를 해제하는 방법 (0) | 2023.04.17 |