문제
$의 의미는 무엇입니까! 쉘 또는 쉘 스크립팅에서? 다음과 같은 스크립트를 이해하려고합니다.
local@usr> a=1
local@usr> echo $a
1
local@usr> echo $!a
a
변수를 다시 인쇄하고 있습니다. 그게 다야? 우리가 가진 다른 $ X 옵션은 무엇입니까? 내가 아는 사람은 $$, $*, $?. 누군가가 나를 좋은 출처를 가리킬 수 있다면 도움이 될 것입니다. BTW, 이것은 Sun OS 5.8, KSH에 있습니다.
해결책
다양한 $…
변수는 다음에 설명되어 있습니다 강타 매뉴얼. 매뉴얼에 따르면 $!
백그라운드에서 시작된 마지막 프로세스의 PID로 확장됩니다. 보다:
$ echo "Foo"
Foo
$ echo $!
$ true&
[1] 67064
$ echo $!
67064
[1]+ Done true
~ 안에 ksh
그것은 똑같이하는 것 같습니다.
다른 팁
로부터 ksh
내 시스템의 남자 페이지 :
${!vname} Expands to the name of the variable referred to by vname. This will be vname except when vname is a name reference.
당신이 묻는 껍질의 경우, ksh, KSH 매뉴얼, 이것을 읽으십시오 :
매개 변수 대체
매개 변수는 식별자, 하나 이상의 숫자 또는 문자 *, @, #,?, -, $ 및!입니다.
그것들이 허용되는 옵션 $*, $@, $#, $?, $-, $$ 및 $!입니다.
앞으로 더 많은 것이 포함될 수 있습니다.
매개 변수 $!의 경우 매뉴얼 :
"!" 마지막 배경 명령의 프로세스 번호가 호출되었습니다.
배경 프로세스를 시작하면 sleep 60 &
, 그러면 그러한 프로세스에 대한 프로세스 번호가 있으며 매개 변수 $! 그 번호를 인쇄합니다.
$ sleep 60 &
[1] 12329
$ echo "$!"
12329
실행에 백그라운드 프로세스가 없으면 (쉘이 시작될 때와 같이) exansion이 비어 있습니다. 널 값이 있습니다.
$ ksh -c 'echo $!'
백그라운드 프로세스가있는 경우 해당 프로세스의 PID로 확장됩니다.
$ ksh -c 'sleep 30 & echo $!'
42586
그것이 이유입니다 echo $!a
확장 a
. 보고 할 PID가 없기 때문입니다.
$ ksh -c 'echo $!a'
a
다른 쉘은 확장 목록 (일반적으로 1 $ 및 다음 문자가있는 매개 변수)을 가질 수 있습니다.
예를 들어, Bash는 이것을 인식합니다 *@#?-$!0_
"특수 매개 변수"로. 검색 배쉬 매뉴얼 제목 "3.4.2 특수 매개 변수".
특수 매개 변수
쉘은 여러 매개 변수를 특별히 처리합니다.
마지막 배경 또는 배경 기능의 프로세스 ID를 제공합니다. 아래 링크를 살펴보십시오.
http://www.well.ox.ac.uk/~johnb/comp/unix/ksh.html#specvar
! 유닉스의 참조 연산자이지만 해당 이름으로 호출되지는 않습니다.
항상 어머니 과정을 말합니다. 타이핑을 시도하십시오 :! VI에서는 명령 프롬프트로 이동하여 종료 명령이 될 때까지 평소와 같이 명령을 실행할 수 있습니다.
! sqlplus에서는 명령 프롬프트에서 명령을 실행합니다. 이것을 sqlplus로 사용해보십시오
SQL>! ls --- 이것은 현재 DIR에 파일 목록을 제공합니다.
$! - 현재/최신 프로세스의 프로세스 ID를 제공합니다.