引用符を避ける

引用符を避ける

私のスクリプトからこの行を印刷するためにいくつかの方法を試しました。

alias myname='export PATH="/path/to/bin:$PATH"'

彼らはすべて異なる問題を持っています。

私の最後の試み(覚えておいてください!)は次のとおりです。

printf '%s' '%s\n' 'alias myname=' ''\'"export PATH=\"/path/to/bin:$PATH\"" \'''  >> ~/.bashrc

しかし、うまくいきません。 PATHディレクトリを数回印刷してalias mynameから%sn

(私はprintfを使用することを好む)

答え1

質問を正しく理解したら、次の行を追加しようとしています。

alias myname='export PATH="/path/to/bin:$PATH"'

~/.bashrcあなたのファイルに

echo$ PATHが間違った時間に拡張されたため、明らかなタイプは失敗します。

代わりに、いくつかの参照ブレンドを実行する必要があります。

echo "alias myname='export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

今何らかの理由で使用したいと言われましたprintf。その後、次のようにできます。

printf "%s\n" "alias myname='export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

=両方を別々の文字列として扱うには、次のようにします。

printf "%s=%s\n" "alias myname" "'export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

など。

printf型パラメータのみを取り、その後に値のリストが続きます。)

答え2

2つの簡単な解決策があります。一つは使用することです。ここのドキュメント引用符の代わりに。ここでのドキュメント内の変数とコマンドの置き換えは、セクションに引用符が含まれているドキュメントのここに引用フォームを使用してドラッグ<<EOFできます。

cat <<\EOF >>~/.bashrc
alias myname='export PATH="/path/to/bin:$PATH"'
EOF

別の方法は、印刷したい文字列の周りに一重引用符を使用することです。'\''一重引用符リテラルを終了し、一重引用符リテラルを追加し、新しい一重引用符リテラルを開始するには - を使用して、一重引用符リテラル内の一重引用符を効果的にエスケープできます。

echo 'alias myname='\''export PATH="/path/to/bin:$PATH"'\'''

(最後の空の文字列リテラルを最適化できます''。)

一部のシェルでは、echoコマンドは引数を文字どおりに印刷しないため、文字列を印刷する安定した方法は次のようにすることですprintf

printf '%s\n' 'alias myname='\''export PATH="/path/to/bin:$PATH"'\'''

この特別なケースでは、echo実行する唯一の拡張はバックスラッシュと先行を含むために機能します-

関連情報