「と」の違いは何ですか? [複製]

「と」の違いは何ですか? [複製]

Bashスクリプトでテキストファイルを作成しようとしています。

このechoコマンドは複数行にまたがって二重引用符 ""があります。

#!/bin/bash 

echo "blabla bla bla bla "blabla" 
bla bla " bla bla bla"
and so on and so on

bla bla

blu bla  "bla bla bla "
bla bla" > /root/bin/bla

コマンドに二重引用符 ""がたくさんありますが、echoこれは望ましくありません。

私がやった

#!/bin/bash 

echo 'blabla bla bla bla "blabla" 
bla bla " bla bla bla"
and so on and so on

bla bla

blu bla  "bla bla bla "
bla bla' > /root/bin/bla

二重引用符「と一重引用符」の間に違いがあるかどうかを知りたいです。

どちらがより高い優先順位を持っていますか?ただ視覚的に違うからでしょうか?

ベストアンサー1

~からバッシュマニュアル:

3.1.2.2一重引用符

一重引用符( ''')で文字を囲むと、引用符内の各文字のリテラル値が保持されます。前にバックスラッシュがある場合でも、一重引用符の間に一重引用符を使用することはできません。

3.1.2.3二重引用符

文字を二重引用符(「"」)で囲むと、履歴拡張が有効になっている場合は、「$」、「」、「\」、および「!」以外の引用符内のすべての文字のリテラル値が保持されます。引用符内で特別な意味を維持し(シェル拡張を参照)、バックスラッシュは後ろに '$'、'''、''''、'文字のいずれかが続く場合にのみ特別な意味を保持します。 \ 'または改行文字。二重引用符内では、これらの文字の1つに続くバックスラッシュが削除されます。特別な意味を持たない先行バックスラッシュ文字は変更されません。二重引用符の前にバックスラッシュを追加すると、二重引用符の中に二重引用符を入れることができます。有効にすると、「!」が二重引用符内に表示され、バックスラッシュでエスケープされない限り、履歴拡張が実行されます。前の「!」のバックスラッシュは削除されません。特殊パラメータ「*」と「@」は、二重引用符で囲まれた場合に特別な意味を持ちます(シェルパラメータ拡張を参照)。

上記のいくつかの実際のデモは次のとおりです。

  • 二重引用符は計算されたパラメータ拡張を許可しますが、一重引用符は許可しません。
$ var=foo
$ echo "$var"
foo
$ echo '$var'
$var
  • 二重引用符を使用するとバックスラッシュエスケープを評価できますが、一重引用符では次のことはできません。
$ echo "\\"
\
$ echo '\\'
\\
  • 二重引用符は計算されたコマンドの置換($(`)を受け入れますが、一重引用符は次を受け入れません。
$ echo "$(echo bar)"
bar
$ echo '$(echo bar)'
$(echo bar)

おすすめ記事