후 첫 번째 인수 sh -c inline-script
에 간다 $0
(또한 오류 메시지에 사용되는), 나머지는 들어가 $1
, $2
...
$ sh -c 'blah; echo "$0"; echo "$1"' my-inline-script arg
my-inline-script: blah: command not found
my-inline-script
arg
그래서 당신은 원합니다 :
sh -c 'find "$1"' sh /tmp
(예전 sh
에는 첫 번째 인수가 $1
대신 구현 된 구현을 찾을 수 있으므로 다음을 수행하십시오.
sh -c 'find "$1"' /tmp /tmp
또는:
sh -c 'shift "$2"; find "$@"' sh 3 2 /tmp1 /tmp2
두 가지 행동을 모두 설명하기 위해 POSIX가 널리 보급되어 공개되었습니다.
설정하려는 경우 $1
, $2
당신이 기능을 사용 할 위치를 현재 쉘 내에서 로컬 범위에서, 그입니다. Bourne과 같은 껍질에서 :
my_func() {
find "$1"
}
my_func /tmp
일부 쉘은 익명 함수를 지원합니다. 그 경우입니다 zsh
:
(){find "$1"} /tmp
또는 es
:
@{find $1} /tmp
현재 위치 매개 변수를 변경하기 위해 구문은 쉘에 따라 다릅니다. dchirikov 이미 본쉘 커버하고있다 (쉘, 콘 쉘 bash
, zsh
, POSIX, ash
, yash
...)을.
구문은 다음과 같습니다.
set arg1 arg2 ... argn
그러나 다음이 필요합니다.
set --
해당 목록을 비우려면 (또는 shift "$#"
)
set -- -foo
또는로 $1
시작하는 것으로 설정 하려면 위치 매개 변수 목록의 끝에 인수를 추가 하는 등 임의의 데이터를 사용할 때 항상 사용하는 것이 좋습니다 .-
+
set --
set -- "$@" other-arg
csh
패밀리 ( csh
, tcsh
) 의 쉘 에서 argv
배열에 할당합니다 .
set argv=(arg1 arg2)
의 껍질에서 rc
가족 ( rc
, es
, akanga
)는에 *
배열 :
*=(arg1 arg2)
요소를 개별적으로 할당 할 수도 있지만 :
2=arg2
에서는 fish
, 위치 매개 변수에 argv
배열 만 (NO $1
, $@
도)
set argv arg1 arg2
에서 zsh
와의 호환성 csh
을 위해 argv
배열에 할당 할 수도 있습니다 .
argv=(arg1 arg2)
argv[4]=arg4
그리고 당신은 또한 할 수 있습니다 :
5=arg5
즉, 다음과 같은 작업도 수행 할 수 있습니다.
argv+=(another-arg)
끝에 인수를 추가하려면 다음을 수행하십시오.
argv[-1]=()
argv[2]=()
끝이나 중간에서 인수를 제거하면 다른 쉘로는 쉽게 할 수 없습니다.
(find $1) /tmp
구문 오류입니다. 실제로(any-command) more-arguments
구문 오류입니다. 당신이하려는 일을 다르게 설명 할 수 있습니까?