$和$ {}之间的差异

Mel*_*ier 3 shell ksh

有人可以向我解释一下,在korn shell中,有什么区别:

ANOTHER_VAR=${SOME_VAR}
Run Code Online (Sandbox Code Playgroud)

ANOTHER_VAR=$SOME_VAR
Run Code Online (Sandbox Code Playgroud)

我遇到了这些类型的声明,看不出有什么不同......

谢谢!

Jon*_*ler 5

一个名字周围有两个大括号字符,另一个没有; 否则,在这种情况下,没有区别.

但是,如果你有:

ONE_VAR="$TWO_VAR_$THREE_VAR"
UNO_VAR="${TWO_VAR}_${THREE_VAR}"
Run Code Online (Sandbox Code Playgroud)

然后在值$ONE_VAR$UNO_VAR将除非两个不同$TWO_VAR$TWO_VAR_存在,$TWO_VAR_认为存储在值$TWO_VAR加上一个结尾下划线(其中$TWO_VAR可能是一个空字符串,或未定义的,只要$TWO_VAR_保持只是一个下划线).

感谢威廉Pursell用于指出在以前版本的一个小误差.

在许多情况下,您必须使用大括号,例如:

UNE_VAR=${YET_ANOTHER_VAR:-"default setting"}
Run Code Online (Sandbox Code Playgroud)