$@ 변수에서 noglob 제거

$@ 변수에서 noglob 제거

매개변수를 쉘 스크립트에 전달하고 싶지만 얻은 것은 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은 없습니다 .kshfilec

명시적 인터프리터( 예 sh: .#!


tcsh귀하의 스크립트는 or csh스크립트 처럼 보이기 때문에 ( set구문은 완전히 정확합니다. 이러한 쉘에는 filec쉘 옵션도 있지만 제가 아는 한 $@변수는 포함되어 있지 않습니다):csh

만약에작성 중인 것은 csh또는 스크립트입니다 tcsh. 그런 다음 스크립트가 or 를 사용하여 호출되는지 확인하십시오. 스크립트가 csh실행 tcsh가능하고 명시적인 해석기 없이 호출되는 경우 행이 #!둘 중 적절한 것을 가리키는지 확인하십시오.

즉, 스크립팅하는 언어를 알고 올바른 해석기를 사용하는지 확인하십시오.

관련 정보