デフォルト値でパラメータを置き換える: ${1-str} と ${1-`echo str`}

デフォルト値でパラメータを置き換える: ${1-str} と ${1-`echo str`}

${1-default_string_value}違いは何ですか?${1-`echo default_string_value`}

最初の形式の代わりに2番目の形式を使用するのはなぜですか?

編集する:

比較的普及しているgitエイリアスのように、いくつかの場所で使用されている2番目の形式を見ました。abbrev = !sh -c 'git rev-parse --short ${1-`echo HEAD`}' -

私の直感は、2番目のフォームがコマンドをデフォルトとして使用する必要がある既存の(Google検索など)スニペットを変更して使用されることです。しかし、何か見過ごしている可能性があるので、この質問です。

ベストアンサー1

機能的な面では、特に違いはありません。効率が落ちるだけです。コードに関するいくつかの追加注意事項:

  • `...`引用符が付いていないまま残ります${1...}。これは分割+グローブの影響を受けるという意味で、ここでは意味がありません。
  • -$0このインラインスクリプトでは値を選択することはお勧めできません。たとえば、エラーメッセージを非常に混乱させる可能性があります。
  • `...`廃止予定のコマンド代替形式です。$(...)今は好まれますが、この特別な場合には特に違いはありません。

また、コマンドのシェルメタ文字(|&;<>()$`\"' \t\n*?[#~=%"(sh言語からコマンドパラメータを分離するSPCを含む)次に、gitシェルを実行して解釈します。ニックネームそして "$@"それに付いています。これでようやく実行されますsh -c 'sh -c...'

さらに最適化するには、次のように変更できます。

git config --global alias.abbrev '!
  abbrev() {
    exec git rev-parse --short "${1-HEAD}"
  }
  abbrev'

これにより、一部のフォークとエグゼクティブが節約されます。

おすすめ記事