shellcheck wiki에 따르면쉘 스크립트 : 미정 -a, -O 스위치 동작
-a
및-o
는 [...] 시험 발현이 잘 정의되지 않은에서AND
OR
및 의미한다. 그것들은 POSIX에서 구식의 확장 기능이며, 그 동작은 거의 항상 정의되어 있지 않습니다.
어떤 잘못된 생각 일 수 있습니까?
shellcheck wiki에 따르면쉘 스크립트 : 미정 -a, -O 스위치 동작
-a
및-o
는 [...] 시험 발현이 잘 정의되지 않은에서AND
OR
및 의미한다. 그것들은 POSIX에서 구식의 확장 기능이며, 그 동작은 거의 항상 정의되어 있지 않습니다.
어떤 잘못된 생각 일 수 있습니까?
-a
및 -o
이 제기 할 수있는 문제에 대한 설명은 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html#tag_20_128_16을 참조하십시오. 일반적으로 표현식이 구문 분석되는 방식은 매개 변수가 확장되는 방식에 따라 달라집니다. 다음과 같은 시험을 고려 :
test "$1" -a "$2"
$1
의 값에 따라,이 중 하나를
# Unspecified behavior
# With three arguments, the first "!", the second argument
# must be a unary primary like -n or -f.
test "!" -a "$2"
또는
test "foo" -a "$2" # Test that "foo" and "$2" are non-zero length strings
$1
경우 !
, test
가 부정으로 그 치료 것입니다 수 연산자는 길이를 검사해야하는 문자열이 아닙니다.
또한 test
은 4 개 이하의 인수에 대해서만 잘 정의되어 있습니다. -a
및 -o
은 일반적으로 5 개 이상의 인수가 test
으로 전달되도록합니다.