シェルスクリプトからアプリケーションにアスタリスク(ワイルドカード)を渡すbash拡張を停止することはできません。

シェルスクリプトからアプリケーションにアスタリスク(ワイルドカード)を渡すbash拡張を停止することはできません。

引用符を使用せずにアスタリスク["*"]ワイルドカードをアプリケーションに渡す必要があるシェルbashスクリプトがあります。私は数時間読んで、シェルスクリプトを呼び出すときに常に "set -f"を使用することを発見しましたが、これは何もしません。たぶん私は何かを誤解しているかもしれませんが、何を理解していません。

私はモノフレームワークを使用してC#アプリケーションを作成していますが、bashでの呼び出しは次のとおりです。

#!/bin/bash
set -f
mono app.exe "$@"

「runit」というシェルスクリプトは、次のように使用されます。

走る*

誰でもこれを説明できますか?このスクリプトでアクティブなシェルオプションを出力してみましたが、何も表示されませんでした。

ベストアンサー1

そして

#!/bin/bash
set -f
mono app.exe "$@"

set -f"$@"二重引用符で囲まれた引数の配列()はもはや拡張されていないため、効果はありません。

"$@"値を持つパラメータを含めても変更されませ*mono app.exe

問題は、このラッパースクリプトを呼び出すシェルがデフォルトで行うset +fようにアスタリスクを拡張しようとしていることです。

set -fラッパーではなく呼び出しシェルでこれを行う必要があります。


(デフォルト)の場合、バックスラッシュ()はset +f考慮できる引用(または)の\*別の選択肢です。'*'"*"

おすすめ記事