Bash ワイルドカード部分一致ディレクトリ

Bash ワイルドカード部分一致ディレクトリ

人々のシステムで部分的に変更されたディレクトリを見つけようとするbashスクリプトがあります。

cd "$HOMEDIR/AppData/Local/GitHub/PortableGit"*"/bin"

しかし、これはうまくいかないようです。文字列リテラルのみを許可します。

正しくサイズを変更する簡単な方法はありますか?

編集する:

まあ、変ですね。たまには効果がある時もありますよ。

私がこれを行うとき:

GIT_DIR=$HOMEDIR/AppData/Local/GitHub/PortableGit*/bin
eval GIT_DIR_PASS=$GIT_DIR
echo $GIT_DIR_PASS

正確な情報を得ました。

ただし、$ GIT_DIR_PASSを別の変数に割り当てようとすると、文字列リテラルバージョンが表示されます。

ベストアンサー1

GIT_DIR=$HOMEDIR/AppData/Local/GitHub/PortableGit*/bin

上記のワイルドカードは、次のものを含むことができるスカラー変数に割り当てるため、拡張されません。一つ文字列なので、トークン化やファイル名の生成は発生しません。

eval GIT_DIR_PASS=$GIT_DIR

ここでは単純なコマンドの引数なので、ワイルドカードは拡張されますが、パスは"GIT_DIR_PATH=..."

echo $GIT_DIR_PASS

ここではワイルドカードが拡張されます。変数の内容を印刷する代わりに変数が参照されないため、拡張によって生成された引数のリストを印刷します。

あなたが望むもの:

set -- "$HOMEDIR"/AppData/Local/GitHub/PortableGit*/bin

つまり、パターンを一致するファイルのリストに展開し、それを$1$2...に割り当てます。

GIT_DIR=$1

最初のものを選択してください。

おすすめ記事