BASH (および zsh や Kornshell などの他の Bourne タイプのシェル) では、変数を設定するときに等号の前後にスペースを入れることはできません。
良い:
$ foo="bar"
悪い:
$ foo= "bar"
$ foo = "bar"
スペースの使用を妨げる本当の理由はありません。他のプログラミング言語では、これに関して問題はありません。これは、シェル自体の構文にすぎません。
その理由は、シェルが空白に基づいてコマンド ラインを分割する元の Bourne シェル解析に関連している可能性があります。これによりfoo=bar
、2 つまたは 3 つの代わりに 1 つのパラメーターが作成されます (等号の両側に空白があるか、または片側だけに空白があるかによって異なります)。シェルは=
記号を見て、このパラメーターが代入であることを認識できます。
シェル パラメータの解析は、多くの点で非常に原始的です。空白は非常に重要です。応答性を高めるには、シェルを小さく高速にする必要があります。これは、複雑な行の解析などの不要なものを削除することを意味します。
逆コンマ 引用符のことだと思います。二重引用符は、空白によるパラメーターの分割をオーバーライドするために使用されます。
悪い:
$ foo=this is a test
bash: is: command not found
良い:
$ foo="this is a test"
二重引用符は補間を許可します。一重引用符は次のことを行いません。
$ foo="bar"
$ echo "The value of foo is $foo"
The value of foo is bar
$ echo 'The value of foo is $foo'
The value of foo is $foo.
一重引用符で始める場合は、二重引用符を中に入れることができます。一重引用符がある場合は、中に二重引用符を入れることができます。
$ foo="bar"
$ echo "The value of foo is '$foo'"
The value of foo is 'bar'
$ echo 'The value of foo is "$foo"'
The value of foo is "$foo"
これは、 unquote する必要がないことを意味します$data
。ただし、アンダースコアは変数名で有効な文字であるため、中かっこで囲む必要があります。$data
したがって、変数がであり、 ではないことをシェルが理解していることを確認する必要があります$data_backup
。
name="/home/cft/${data}_test.tar"