후행 콜론 및 대시에 대한 내장 테스트 명령

후행 콜론 및 대시에 대한 내장 테스트 명령

test대시 내장(또는) 명령의 후행 콜론의 의미는 무엇입니까 [? if [ ... ]: ; then .. ; fi에서는 (완전히) 작동 하지만 에서는 작동하지 않는다는 사실을 알고 dash놀랐습니다 . bash이는 내장 함수가 명령과 다르게 동작하기 때문인 것 같습니다.

$ /usr/bin/\[ 1 ] && echo 1
1
$ /usr/bin/\[ 1 ]: && echo 1
/usr/bin/[: missing `]'
$ [ 1 ]: && echo 1
1

답변1

명령을 구문 분석하면 이는 더 큰 문제인 것 같습니다. bash닫는 괄호가 마지막 인수가 될 것으로 예상하고 정확히 "]" 문자열이 아닌 경우 불평합니다.

bash$ [ 1 ]
bash$ [ 1 ] hi
bash: [: missing `]'
bash$ [ 1 ]hi
bash: [: missing `]'
bash$ dash
$ [ 1 ]
$ [ 1 ] hi
dash: 2: [: missing ]
$ [ 1 hi]
dash: 3: [: missing ]
$ [ 1 ]:
$ [ 1 ]hi
$

쉘은 dash첫 번째 문자가 "]"인지 확인하고 나머지는 무시합니다. "]"가 마지막 인수의 첫 번째 문자에 없으면 다음 bash과 유사한 오류가 반환됩니다.

관련 정보