0

コマンドラインで bash プロファイルの最後に直接追加したいのですalias foo='bar'が、それを行うには 2 つの方法があります。一重引用符をバックスラッシュでエスケープするか、コマンドを二重引用符で囲みます。

  1. echo alias foo=\'bar\' >> ~/.bash_profile
  2. echo "alias foo='bar'" >> ~/.bash_profile

一方の方法は他方よりも「安全」と見なされますか? どちらも期待どおりに機能しますが、私が疑問に思っているのは、これらの方法のいずれかが他の方法で使用されたときに予期しない動作を引き起こす可能性が低いかどうか、または (この特定のコンテキストで) 一重引用符をエスケープする他の推奨される方法があるかどうかです。最もエラーが発生しにくいです。

4

2 に答える 2

2

あなたの2つのコマンドは、echo alias foo=\'bar\'2つの引数をecho(つまりaliasfoo='bar')にecho "alias foo='bar'"渡し、1つだけ(つまりalias foo='bar')を渡すという点でわずかに異なります。すべての引数をスペースで区切って出力するためecho、これはあなたのケースでは同じことになりますが、一般的なケースでは覚えておく価値があります。

ただし、投稿した実際のコマンドでは、とにかく単一引用符は必要ありません — コマンドalias foo='bar'はコマンドと同等ですalias foo=bar— したがって、通常の書き方は次のとおりです。

echo 'alias foo=bar' >> ~/.bash_profile

より一般的な場合、bar任意のコマンドである可能性がありますが、全体を単一引用符で囲んで、迷子の展開や単語の分割が発生しないようにします。たとえば、次のように記述します。

echo 'alias foo='\''command with * and ? and spaces'\' >> ~/.bash_profile

(そのようなコマンドに適用された最初のバージョンはひどく誤動作するでしょう; 2番目のバージョンはこのケースをうまく処理しますが、エイリアスされているコマンドにパラメータ展開またはその他があると壊れます).

于 2013-07-13T17:47:08.493 に答える
0

問題につながる可能性のあるシナリオは、言及した行をファイルに書き込もうとした場合です。

file.txt << !
echo alias foo=\'bar\' >> ~/.bash_profile
echo "alias foo='bar'" >> ~/.bash_profile
!

file.txt をチェックして、出力が期待どおりかどうかを確認できます。

于 2013-07-13T17:51:41.780 に答える