bashでのコマンドライン引数の扱いについて : その1 ワイルドカード(*)の場合

前回、bashでのコマンドライン引数を調べるサンプルプログラムを作ってみたので、さっそくこれを使って実際の扱いを調べてみることにしました。

前回のブログ記事↓

ワイルドカード(*)について

まずコマンドラインでよく使うワイルドカード(*)がどう引数として渡されるのかを調べてみます。
状況 : ディレクトリ内にあるファイルは以下の6つ。
ここでサンプルプログラム(argvtest01.py)を実行
$ python3 argvtest01.py *
すると以下のように出力されます。
argv1 = argvtest01.py
argv2 = file01.txt
argv3 = file02.txt
argv4 = file03.txt
argv5 = file04.txt
argv6 = file05.txt
ディレクトリ内にあるファイルのファイル名がそれぞれ別の引数に渡されています。

次にエスケープ文字を前に置いた場合
$ python3 argvtest01.py \*
argv1 = *
引数に*(アスタリスク)が文字として渡されています。

シングルクォートで囲んだ場合
$ python3 argvtest01.py '*'
argv1 = *
これも引数に*が渡されています。

ダブルクォートではどうなるか
$ python3 argvtest01.py "*"
argv1 = *
これも*が渡されています。

ドットを前に置いた場合
$ python3 argvtest01.py .*
argv1 = .
argv2 = ..
となりました。隠しファイルを作っておいた場合はそのファイル名も渡されます。


今回は特に変わったことはしていないので、ほぼ想定通りの結果でした。
ワイルドカードを使う場合、シェルで展開させたい場合とコマンドにワイルドカードを渡してコマンド側で展開などに使いたい場合があるかと思います。そういった場合にどう書けばよいかはこれでだいたい分かるかなと。

また、ダブルクォートで囲んだ場合に展開されるのかどうかがたまに思い出せないこともあったりしますが、こうやって確認しておくと安心ですね。
(シェルで展開されるのかコマンドで展開されるのかや、シェル変数にワイルドカードが入っている場合など状況によっては考えるパターンが多い)


Amazon プログラミング関連書籍など

コメント

スポンサーリンク


このブログの人気の投稿

gnuplotでプロットなどの色をcolornameの指定で変更する

catコマンドの出力を行番号付きにするためのコマンドラインオプション(-n, -b)

Ubuntu Softwareが起動しないのでいろいろと調べてみる(Ubuntu 20.04.1 LTS)

gnuplot : グラフにグリッド線を描く方法(set grid)

gnuplot : プロット画像のサイズ指定について(set sizeとの違い)