シェルスクリプトにコマンドライン引数として「*」を渡す

シェルスクリプトにコマンドライン引数として「*」を渡す

Bashには次のシェルスクリプトがあります。

function zzqfoo {
    python ~/my/dir/path/zzqfoo.py $(abspath $1) $2
}

アイデアは、ローカルファイル名を使用してコマンドラインからPythonプログラム "zzqfoo.py"を呼び出すことですが、zzqfoo.pyは$(abspath $1)

しかし、私が電話したとき

>>> zzqfoo myfile *

シェルが壊れ、*God Knowsを2番目の引数としてzzqfoo.pyに送信します。

ダメージを防ぐ方法は*? (zzqfoo.pyは2番目のコマンドライン引数をそのまま受け取ることを期待しています。)

ありがとうございます!

ベストアンサー1

シェルが壊れ、*God Knowsを2番目の引数としてzzqfoo.pyに送信します。

「中断」されません*。常に行うことを行います。つまり、*現在のディレクトリのファイル名とディレクトリ名に一致するワイルドカードに展開されます。

あなたは:

  • *パラメータとして渡すときの引用
  • quote$1などが関数$2で使用されている場合、シェルはそれに対して単語分割やワイルドカード拡張を実行しません。

だから:

function zzqfoo {
    python ~/my/dir/path/zzqfoo.py "$(abspath "$1")" "$2"
}

そして実行してください:

zzqfoo myfile '*'

おすすめ記事