シェルの$特殊変数の一覧および説明 †本資料は、bashシェルで動作確認を行いました。 関連記事 †環境変数IFSについての記事に関しては以下の2つが参考になります。 $特殊変数一覧 †
$# サンプルスクリプト †#!/bin/bash echo $# 実行結果 $ chmod +x no1.sh $ ./no1.sh 1 2 3 4 5 5 引数として5つ渡されたことが確認できます。 $数字 サンプルスクリプト †#!/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 $? 動作確認 †lsコマンドの実行結果を確認しています。 $ ls foo.txt bar.txt $ echo $? 0 lsコマンドで存在しないファイルを指定し実行しています。 $ ls abc ls: abc にアクセスできません: No such file or directory $ echo $? 2 $$ サンプルスクリプト †#!/bin/bash echo PID = $$ 実行結果 $ chmod +x no3.sh $ ./no3.sh PID = 4940 $0 サンプルスクリプト †#!/bin/bash echo scriptname = $0 echo basename = `basename $0` 実行結果 $ chmod +x no4.sh $ ./no4.sh scriptname = ./no4.sh basename = no4.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に指定された区切り文字で各引数が表示されています。 $@ サンプルスクリプト †特殊変数$@は上記の$*と動作は変わりませんが、IFSの影響を受けません。 #!/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の影響を受けていないのが確認できます。(上記の$*と見比べてください。) 以上、$特殊変数の記事でした。 |