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 プログラミング関連書籍など
前回のブログ記事↓
ワイルドカード(*)について
まずコマンドラインでよく使うワイルドカード(*)がどう引数として渡されるのかを調べてみます。状況 : ディレクトリ内にあるファイルは以下の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 プログラミング関連書籍など
コメント
コメントを投稿