/bin/sh를 호출하고 -c 옵션을 사용하여 '+ x' 즉, '+ x'라는 프로그램을 실행하는데, 이름은 더하기 기호로 시작합니다./bin/sh의 인수에서 '-'처리 : POSIX 대 Bash/Dash/FreeBSD의 구현과 비교
'+ x'는/bin/sh에 의해 옵션 (특히 'x'옵션 사용 안 함)으로 해석되므로/bin/sh는이를 옵션으로 해석하지 않아야합니다. 리눅스에서 대시와 배쉬를 사용
/bin/sh -c -- +x
:
(1) 첫 번째 변종 : 나는 다음과 같은 다른 결과가 내가 사용하는/빈/쉬에 따라 얻을 명령 + X가 실행됩니다.
FreeBSD의 sh 사용 : 명령이 실행되고 + x 옵션이 설정됩니다.
(2) 두 번째 변형 :
/bin/sh -c +x
리눅스에 대시와 배쉬 사용은 다음 + X 옵션을 설정하고 옵션 -c 인수 없기 때문에 오류가 있습니다.
FreeBSD의 sh 사용 : + x 명령이 실행됩니다.
(3) 셋째 변이체
/bin/sh -c - +x
리눅스 일점 배시 사용은 : + (X)를 실행한다.
FreeBSD의 sh 사용 : 명령이 실행되고 + x 옵션이 설정됩니다.
(4) 네 번째 변형 : (제안 의견 추가)
/bin/sh -c+x
리눅스에 대시와 배쉬를 사용 : 잘못된/잘못된 옵션을 '+'
의 FreeBSD의 쉬를 사용 : 나쁜 -c 옵션
내 질문 : POSIX는 무엇을 처방합니까?
여기 쉬의 POSIX 사양을 읽고 있어요 : http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html
그것에서 인용 : ". 단일 하이픈은 첫 번째 피연산자로 취급하고 무시해야한다 둘 경우 '-'와 '-'입니다 인수로 주어진 경우 또는 다른 피연산자가 단일 하이픈 앞에 오는 경우 결과는 정의되지 않습니다. "
인용 부호가 '-c'다음에 오는 단일 대시에도 적용되는지 확실하지 않습니다.
그래서 Dash/Bash 또는 FreeBSD 중 어느 것이 맞습니까? 또는 POSIX가 양쪽 모두를 허용하기 때문에 양쪽 모두가 옳다면 어떻게이 방법을 이식 할 수 있습니까?
좋은 측정법 :'/ bin/sh -c + x'는 무엇을 하는가? –
@bishop 나는 그렇게 생각하지 않는다. '/ bin/sh'는 인수'-c'와'+ x'를 볼 것이므로'getopt()'는 그것을'/ bin/sh -c + x'로 처리해야합니다. –
'sh'에 대한 POSIX 참조는 다음과 같습니다. http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html –