在bash
中扩展变量时,我通常使用${var}
,但我经常也会看到"$var".
我所说的变量是用于在脚本中将参数传递给bash函数。我不需要它们或者一定要它们使用通配或其他花哨的东西。它仅用于传递字符串。那么哪种扩展更适合这种情况呢?
答案 0 :(得分:4)
这不是选择其中一个问题,在某些情况下需要大括号时,引号总是值得推荐。
引号保留格式,而大括号用于执行variable expansion和一些边缘情况:
如果我们不引用变量调用,则格式将丢失。
$ myvar="hello
how are you"
$ echo $myvar
hello how are you
$ echo "$myvar"
hello
how are you
另外,假设您将文件名存储在变量中。如果文件名恰好有空格,除非引用它,否则无法正确使用文件名。
$ echo "hello" > "my file"
$ ls -ltr
-rw-r--r-- 1 me me 0 Dec 20 10:41 my file
$ file="my file"
$ cat $file
cat: my: No such file or directory
cat: file: No such file or directory
$ cat "$file"
hello
如果我们不使用花括号,我们就不能使用变量,而是在调用变量后不添加空格的值。
$ myvar="hello"
$ echo ${myvar}1
hello1
$ echo $myvar1
$
答案 1 :(得分:3)
$ {var}是更好的选择,因为您可以清楚地看到变量的名称。
例如:
var = "hello"
echo ${var}_1
hello_1
echo $var_1
echo $var_1
没有显示任何内容,因为bash认为您尝试访问变量var_1
答案 2 :(得分:3)
这些是彼此正交的,你需要理解两者:
这是Bash中的一个重要主题,它可以为微妙的错误带来无限的机会,所以这里的任何解释都不会完整。考虑到这一点:
${var}
而不是$var
将变量$var
与周围的代码分开。例如:
$ var=foo
$ echo $variable
这不打印任何内容(除非定义变量variable
)。
$ echo ${var}iable
fooiable
“$ var”确保变量内容不会发生分词:
$ var='foo bar'
$ echo $var
foo bar
$ echo "$var"
foo bar
同样,这只是表面上的问题。如果你想编写可靠的Bash脚本,链接的文章(以及几乎所有的wiki)都是很好的学习场所。