在 BASH(以及其他 Bourne 类型的 shell,如 zsh 和 Kornshell)中,设置变量时等号周围不能有空格。
好的:
$ foo="bar"
坏的:
$ foo= "bar"
$ foo = "bar"
没有真正的理由会阻止使用空间。其他编程语言对此没有任何问题。这只是 shell 本身的语法。
原因可能与原始 Bourne shell 解析有关,其中 shell 会根据空格分解命令行。这将使foo=bar
单个参数而不是两个或三个参数(取决于您是否在两侧都有空格或只有等号的一侧)。shell 可以看到这个=
符号,并且知道这个参数是一个赋值。
shell 参数解析在很多方面都非常原始。空白非常重要。外壳必须小而快才能响应。这意味着剥离不必要的东西,比如复杂的行解析。
引号我相信你的意思是引号。双引号用于覆盖空格上的参数中断:
坏的:
$ 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"
这意味着您不必取消引用 $data
。但是,您必须在它周围加上花括号,因为下划线是变量名中的合法字符。因此,您要确保 shell 了解变量 is$data
和 not $data_backup
:
name="/home/cft/${data}_test.tar"