문제

$의 의미는 무엇입니까! 쉘 또는 쉘 스크립팅에서? 다음과 같은 스크립트를 이해하려고합니다.

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를 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top