![$@ 변수에서 noglob 제거](https://linux55.com/image/127777/%24%40%20%EB%B3%80%EC%88%98%EC%97%90%EC%84%9C%20noglob%20%EC%A0%9C%EA%B1%B0.png)
매개변수를 쉘 스크립트에 전달하고 싶지만 얻은 것은 noglob on
출력 매개변수입니다.
금연 건강 증진 협회
#!/bin/ksh
set filec on
set noglob on
echo $@
매개변수 123을 사용하여 쉘 스크립트를 실행하면 123 대신 다음과 같은 출력이 표시됩니다. 이것을 시도했지만 unset noglob
여전히 set noglob off
동일한 결과가 나타납니다. 이 문제를 극복할 수 있도록 도와주세요.
@sh a.sh 123
noglob on
답변1
나는 당신이 이것을 할 것이라고 생각합니다 :
set -o filec
set -o noglob
set
옵션이 없는 인수는 인수를 쉘의 인수로 설정합니다. ~에서man mksh
:
+-o를 사용하여 옵션을 변경할 수 있습니다.옵션여기서 option은 옵션의 긴 이름이거나 +-를 사용합니다.편지문법, 어느편지 옵션의 단일 문자 이름입니다(모든 옵션에 단일 문자 이름이 있는 것은 아닙니다).
(그러나 적어도 filec
이름이 지정된 쉘 옵션을 찾을 수 없습니다.)mksh
답변2
set
쉘 에서와 유사한 방법을 사용하는 경우 sh-
:
set noglob on
실제로 $@
명령줄에 제공된 인수를 및로 대체하여 noglob
이를 수정할 수 있습니다 on
(호출 스크립트에서와 마찬가지로 sh a.sh noglob on
).
쉘 옵션을 설정하려면 noglob
다음을 사용하십시오.
set -o noglob
내가 아는 한 이라는 쉘 옵션 sh
은 없습니다 .ksh
filec
명시적 인터프리터( 예 sh
: .#!
tcsh
귀하의 스크립트는 or csh
스크립트 처럼 보이기 때문에 ( set
구문은 완전히 정확합니다. 이러한 쉘에는 filec
쉘 옵션도 있지만 제가 아는 한 $@
변수는 포함되어 있지 않습니다):csh
만약에작성 중인 것은 csh
또는 스크립트입니다 tcsh
. 그런 다음 스크립트가 or 를 사용하여 호출되는지 확인하십시오. 스크립트가 csh
실행 tcsh
가능하고 명시적인 해석기 없이 호출되는 경우 행이 #!
둘 중 적절한 것을 가리키는지 확인하십시오.
즉, 스크립팅하는 언어를 알고 올바른 해석기를 사용하는지 확인하십시오.