Bourne 셸을 기반으로하는 Korn 셸을 배우고 있습니다. 아래는 내 간단한 코드입니다. ||
운영자가 나에게 오류를주고 몇 가지 이유를 들어 korn 셸 오류 [: missing`] '
read ab
if [ $ab = "a" || $ab = "A" ] ; then
echo hi
fi
: 당신의
if
조건을 작성하는
[: missing `]'
a: command not found
Bourne 셸을 기반으로하는 Korn 셸을 배우고 있습니다. 아래는 내 간단한 코드입니다. ||
운영자가 나에게 오류를주고 몇 가지 이유를 들어 korn 셸 오류 [: missing`] '
read ab
if [ $ab = "a" || $ab = "A" ] ; then
echo hi
fi
: 당신의
if
조건을 작성하는
[: missing `]'
a: command not found
올바른 방법은 다음과 같습니다
[ ... ]
와
read ab
if [ "$ab" = "a" ] || [ "$ab" = "A" ]; then
echo hi
fi
, 그것을 넣어하는 것이 필수적입니다 변수는 큰 따옴표로 묶습니다. 그렇지 않으면, 변수가 아무것도 확장되지 않거나 확장에 공백이 포함되면 쉘은 구문 오류로 실패합니다.
은 참조 :
$ {ab}를 사용하고 있습니다. 큰 따옴표를 사용하는 것이 좋습니다. –
@ Mint.K : 예. '$ {ab}'는 여백에 공백이 있으면 두 개 이상의 단어로 확장됩니다. –
@ Mint.K, 쉘 변수 이름의 일부로 합법적 인 문자로 시작하는 문자열로 연결 연산을 수행하지 않는 한'$ ab '는'$ ab'와 전혀 다르지 않습니다. '$ {ab} _foo'). –
당신이 KSH를 사용하거나 현대 bash는 당신이 표준이 아닌 [[
를 사용할 수 있다면 ... [
대신 ]]
... ]
.
이 두 가지 이점이 있습니다
]]
||
[[
내부 사용할 수 있습니다.이것은 안전하고 짧은
[[ $ab = a || $ab = A ]]
를 작성 만드는'||는'이 아닌'['명령 (예,'['명령이다)에 의해, 쉘에 의해 해석된다. 따라서'['는'$ ab = "a"'인자로 호출되며, 누락 된']'에 대해 불평합니다. 당신은'-o'를 사용할 수 있습니다. 이것은''''에 대한 "or"명령이지만, @codeforester의 메소드가 아마도 더 좋은 방법 일 것입니다. –
@KeithThompson - 나는 최근 버전의 Bash에서'-o'가 더 이상 사용되지 않는다는 것을 알게되었습니다. ksh에 대해 잘 모르겠다. – codeforester
@codeforester, 실제로 특정 POSIX가 아닌 POSIX 사양으로되어 있습니다. –