#navi(../)
* シェルの$特殊変数の一覧および説明 [#d84eb222]
本資料は、bashシェルで動作確認を行いました。~
各種$特殊変数について記述しています。

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

* 関連記事 [#d4aa7dad]
環境変数IFSについての記事に関しては以下の2つが参考になります。
-[[逆引きシェルスクリプト/スペースが含まれる文字列を1行として扱う方法]]
-[[逆引きシェルスクリプト/スペース区切りの文字列を配列に格納する方法]]

-[[特殊変数$*と$@の違い>逆引きシェルスクリプト/特殊変数$*と$@の違い]]
-[[シェルでランダム値を使用する>逆引きシェルスクリプト/シェルでランダム値を使用する]]
-[[シェルの$特殊変数の一覧および説明>逆引きシェルスクリプト/$特殊変数の一覧および説明]]

* $特殊変数一覧 [#uc1a9f9e]
|$#|引数の数を示します&br;&ref(no1.sh);|
|$数字|指定した数字の引数を示します&br;&ref(no2.sh);|
|$?|実行されたコマンドの終了ステータス値が格納されています。&br;通常0が正常終了です|
|$$|実行中のシェルスクリプトのプロセスID(PID)が格納さrています&br;&ref(no3.sh);|
|$0|実行中のシェルスクリプトのファイル名が格納されています&br;&ref(no4.sh);|
|$*|シェルスクリプトに渡された引数全てを示します。引数ごとの区切り文字はIFSに影響されます&br;&ref(no5.sh);|
|$@|上記と同上ですが、IFSの影響は受けず、スペース区切りで全引数を保持しています&br;&ref(no6.sh);|

** $# サンプルスクリプト [#e9925d14]
#ref(no1.sh)
 #!/bin/bash
 echo $#
実行結果~
 $ chmod +x no1.sh
 $ ./no1.sh 1 2 3 4 5
 5
引数として5つ渡されたことが確認できます。

** $数字 サンプルスクリプト [#c4d9ff50]
#ref(no2.sh)
 #!/bin/bash
 echo "arg1: " $1
 echo "arg2: " $2
 echo "arg3: " $3
実行結果~
 $ chmod +x no2.sh
 $ ./no2.sh foo bar hoge
 arg1:  foo
 arg2:  bar
 arg3:  hoge

** $? 動作確認 [#efcf9147]
lsコマンドの実行結果を確認しています。~
正常終了のまた$?には0が格納されています。~
echoコマンドにより$?の値を表示しています。
 $ ls
 foo.txt  bar.txt
 $ echo $?
 0
lsコマンドで存在しないファイルを指定し実行しています。~
エラー番号2が返却されているのが確認できます。
 $ ls abc
 ls: abc にアクセスできません: No such file or directory
 $ echo $?
 2

** $$ サンプルスクリプト [#tec95b75]
#ref(no3.sh)
 #!/bin/bash
 echo PID = $$
実行結果~
no3.shのプロセスIDが4940であることが確認できます。
 $ chmod +x no3.sh
 $ ./no3.sh
 PID = 4940

** $0 サンプルスクリプト [#n7478e78]
#ref(no4.sh)
 #!/bin/bash
 echo scriptname = $0
 echo basename = `basename $0`
実行結果~
以下はスクリプトのパスを指定して実行しています。~
特殊変数$0にはパスも含めたスクリプト名が格納されているのが確認できます。~
basenameコマンドによりスクリプト名のみ取り出すことが可能です。
 $ chmod +x no4.sh
 $ ./no4.sh
 scriptname = ./no4.sh
 basename = no4.sh

** $* サンプルスクリプト [#wb841e61]
#ref(no5.sh)
 #!/bin/bash
 IFS_BAK=IFS
 IFS=,
 echo "$*"
 echo $*
 IFS=IF_BAK

実行結果~
 $ chmod +x no5.sh
 $ ./no5.sh foo bar hoge
 foo,bar,hoge
 foo bar hoge
上記の実行結果を見ると、ダブルクォーテーションで囲んだ"$*"の場合は、IFSに指定された区切り文字で各引数が表示されています。~
ダブルクォーテーションで囲んでいない$*はそのままで表示されているのが確認できます。

** $@ サンプルスクリプト [#b877129b]
特殊変数$@は上記の$*と動作は変わりませんが、IFSの影響を受けません。~
#ref(no6.sh)
 #!/bin/bash
 IFS_BAK=IFS
 IFS=,
 echo "$@"
 echo $@
 IFS=IF_BAK
実行結果~
 $ chmod +x no6.sh
 $ ./no6.sh foo bar hoge
 foo bar hoge
 foo bar hoge
IFSの影響を受けていないのが確認できます。(上記の$*と見比べてください。)

以上、$特殊変数の記事でした。

#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS