7

bash では、 にphp/{composer,sismo}展開されphp/composer php/sismoます。/bin/shシステムシェル(ダッシュだと思います)でこれを行う方法はありますか?私はgit フックを書いていますが、できる限り bash から離れたいと思っています

4

3 に答える 3

4

方法はないようです。おそらく関数内で、ループを使用してこれらの名前を生成する必要があります。または、タイプミスを防ぐために「set -u」を使用して、変数を使用して共通部分を置き換えます。

パフォーマンス上の理由からダッシュを好むようですが、決定を裏付ける数値を提供していないようです。実際のパフォーマンスの違いを測定して再評価することをお勧めします。時期尚早の最適化に陥っている可能性もあります。Bash を使用することで節約できる実装とデバッグの時間と、パフォーマンスの低下の可能性を検討してください。

于 2013-07-23T10:02:14.843 に答える
0

@mikeserv が提供するソリューションが本当に気に入っていprintfますが、ループを使用した例を提供すると思いました。

以下は、両方の文字列を引数として同じコマンドに提供するのではなく、展開された文字列ごとに 1 つのコマンドを実行する場合におそらく最も役立ちます。

for X in composer sismo; do
    echo "php/$X"                   # replace 'echo' with your command
done

ただし、次のように書き換えることができます。

ARGS="$(for X in composer sismo; do echo "php/$X"; done)"
echo $ARGS                          # replace 'echo' with your command

上記のコマンドで$ARGSは引用符で囲まれていないことに注意してください。これは、その内容が単語分割されていることを意味することに注意してください (つまり、元の文字列にスペースが含まれていると、文字列が壊れます)。

于 2014-07-21T14:51:49.280 に答える