• ベストアンサー

linuxの位置パラメータについて

linuxの位置パラメータ、IFS、setコマンドがよくわかりません。 どなたか詳しく説明していただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • freetaka
  • ベストアンサー率53% (106/197)
回答No.1

午前に引き続きお邪魔します linuxでは位置パラメータとして $0 から $9 まで使用できる変数が用意されています $0 には実行したコマンドやシェルスクリプト等が格納されます $1 から $9 は引数として9個まで順番に指定できます $* ですべての引数を表します $# で引数の数がわかります たとえば名前が echo.sh というシェルスクリプトがあるとして 内容が以下だった場合 #!/bin/bash echo "実行したスクリプト名 : $0" echo "引数に指定されたのは : $1 $2 $3 $4 $5 $6 $7 $8 $9" シェルスクリプトを実行する時に 引数として abc def ghi jkl を指定したとする こんな感じ ./echo.sh abc def ghi jkl すると結果は以下のようになると思います 実行したスクリプト名 : ./echo.sh 引数に指定されたのは : abc def ghi jkl これはスクリプト内で関数に対して引数を与えた場合も 同じような扱いです #!/bin/bash hyouji(){ echo "実行したスクリプト名 : $0" echo "引数にしてされたのは : $1 $2 $3 $4 $5 $6 $7 $8 $9" } hyouji abc def ghi jkl 結果は同じものになりますが スクリプト実行時に与えた引数とは別に スクリプト内でも位置パラメータが使えるので 混同しないように注意が必要です こらだけではないですが基本はこんなところです IFSはデリミタ(区切り文字)のことで linuxではデフォルトが空白だったりします なのでcsvのようなカンマ区切りに対応したい場合は IFSをカンマに変更します setコマンドはシェル変数の内容を表示したり 設定する場合に使います しかし使い方を詳しく説明するとかなり長くなるので 簡単に説明すると shやbashの場合は変数を設定する場合に str=aaa のようにsetコマンドを使いませんが cshでは set str=aaa のようにsetコマンドを使うという違いがあります これは自分が使用しているシェルに依存する部分で スクリプトを作成する場合に記述内容に違いがでます その他にIFSに基づいて位置パラメータに文字列を展開するとか 便利な使い方があるので載せておきます set -- 位置パラメータに展開する文字列または変数 ↑setの後のハイフンは2個連続 または set -- だけの場合は位置パラメータの内容を すべてunset(消す)することができます という使い方で たとえば #!/bin/bash set -- "aaa bbb ccc" echo $1 echo $2 echo $3 という内容だと実行した場合に aaa bbb ccc という結果になります これにIFSをカンマに変更したとすると csv形式に対応することができたりします #!/bin/bash #変数を設定 str="aaa,bbb,ccc" #IFSのバックアップと変更 IFS_BAK=$IFS IFS="," set -- $str echo $1 echo $2 echo $3 #IFSをもとにもどす IFS=$IFS_BAK 実行するとデリミタがカンマ区切りとなり 結果は同じものになります 内容としては少し薄いですが 参考までに・・・

shiro857
質問者

補足

回答ありがとうございます。 とても丁寧でわかりやすい説明でした。 また機会があれば宜しくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A