Special Parameters

$?

바로 이전에 실행된 명령의 종료 상태 값을 나타냅니다.

$$

shell 에서 Parent PID 값을 나타내는 변수는 $PPID 인데, shell 자신의 PID 를 나타내는 변수는 $PID 를 사용하지 않고 $$ 를 사용합니다. 이 값은 subshell 에서도 같은 값을 가집니다.

bash 에서는 $BASHPID 변수를 이용해 subshell PID 도 구할 수 있습니다.

$!

& 메타문자를 이용하여 가장최근에 background 로 실행된 process id 를 나타냅니다.
| 파이프로 연결된 명령 그룹일 경우 마지막 process id 가 표시됩니다.

$_

이전 명령에서 사용된 마지막 인수를 값으로 가집니다. 사용된 인수가 없으면 명령 이름이 됩니다.

$ mkdir -p foo/bar/zoo && cp myfile $_

$ mkfifo `mktemp -u` && exec {fd1}<> $_

파이프로 연결된 명령들은 subshell 에서 실행되므로 제외됩니다.

$ echo 000 && echo 111 | echo 222 && echo 333 $_
000
222
333 000

$ echo 000 && echo 111 | { echo 222 && echo 333 $_ ;}
000
222
333 222

$-

Set 명령에 의해 현재 shell 에 enable 되있는 option flags 을 보여줍니다.

Quiz

16 진수로된 RGB 값을 10 진수로 변환하여 출력을 하는 것입니다.

hex_to_rgb() {
    : ${1/\#/}
    (( r = 16#${_:0:2}, g = 16#${_:2:2}, b = 16#${_:4:2} ))
    printf '%s\n' "$r $g $b"
}

$ hex_to_rgb '#abcdef'
171 205 239

------------------------

1. : ${1/\#/}  명령 라인은 $1 인수 값에서 '#' 문자가 제거되면 : abcdef 와 같게 됩니다.

2. 16#${_:0:2} 이것은 $_ 변수를 활용하는 것입니다.
   이전 명령에서 사용된 마지막 인수는 abcdef 가 되므로 ${_:0:2} 의 값은 ab 가 됩니다.