나는 이것의 문제점을 알아 내려고 노력했지만 그것을 이해할 수는 없다.
이 부분은 오류가 발생하는 것 같습니다.
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를 사용한다는 것을 알고 있다면 [[ ... ]]
Posix 호환 단일 브래킷 버전 대신 항상 이중 괄호 조건부 복합 명령을 사용하는 것이 훨씬 쉽습니다 [ ... ]
. , 안쪽 [[ ... ]]
당신이 의지 할 수 있도록 화합물, 단어 분할 및 경로 확장은 단어에 적용되지 않습니다
if [[ $aug1 == "and" ]];
의 값 $aug1
과 문자열 을 비교합니다 and
.
을 사용하는 경우 [ ... ]
항상 다음과 같이 변수를 큰 따옴표로 묶어야합니다.
if [ "$aug1" = "and" ];
변수 확장을 인용하지 않고 변수가 정의되지 않았거나 비어있는 경우 범죄 현장에서 사라지고
if [ = "and" ];
유효한 구문이 아닙니다. $aug1
공백이나 셸 메타 문자 가 포함되어 있으면 다른 오류 메시지와 함께 실패 합니다.
현대 [[
연산자에는 정규 표현식 일치를 포함하여 다른 멋진 기능이 많이 있습니다.
답변
이것을 찾는 데 시간이 걸렸지 만 간격 오류가 있으면 동일한 오류가 발생합니다.
[: =: unary operator expected
옳은:
if [ "$APP_ENV" = "staging" ]
vs
if ["$APP_ENV" = "staging" ]
항상 -x
디버그 변수를 설정 하면 다음을 찾는 데 도움이됩니다.
set -x
답변
명령문 $aug1
에서 사용 하기 전에 값을 지정하십시오 if[]
. 나중에 오류 메시지가 사라집니다.
답변
너는 … :
elif [$ operation = “man”]; 그런 다음 [$ aug1 = “add”]이면; then # <-Line 75 echo “Man Page for : add”echo “”echo “구문 : add [number 1] [number 2]”echo “”echo “Description :”echo “두 개의 다른 숫자를 더합니다.” echo “”echo “Info :”echo “v1.0에 추가됨”echo “”elif [-z $ aug1]; echo “man 페이지를 읽을 명령을 지정하십시오.” else echo “해당 명령에 대한 매뉴얼 페이지가 없습니다.” fi
나는 그 공간을 생각합니다 … 이렇게하십시오 :
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
답변
변수의 기본값을 설정할 수도 있으므로 두 개의 “[“를 사용할 필요가 없습니다. 두 개의 “[“는 하나 대신 두 개의 프로세스 ( “[“는 실제로 프로그램 임)입니다.
$ {VARIABLE : -default} 구문을 사용합니다.
이 “기본”값이 “유효한”값 / 내용과는 다른 방식으로 모든 것을 생각해야합니다.
어떤 이유로 든 불가능한 경우 “if [-z $ VARIABLE]; [! -z $ VARIABLE]; #everything이면 나머지 스크립트로 진행하십시오. “
답변
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)