gpt4 book ai didi

unix - 为什么shell脚本比较经常使用x$VAR = xyes?

转载 作者:行者123 更新时间:2023-12-03 01:31:23 26 4
gpt4 key购买 nike

我经常在使用自动工具(autoconf、automake)的项目的构建脚本中看到这种情况。当有人想要检查 shell 变量的值时,他们经常使用以下习惯用法:

if test "x$SHELL_VAR" = "xyes"; then
...

与简单地检查这样的值相比,这样做有什么好处:

if test $SHELL_VAR = "yes"; then
...

我认为我经常看到这种情况一定有某种原因,但我不知道它是什么。

最佳答案

如果您使用的 shell 执行简单替换,并且 SHELL_VAR 变量不存在(或为空),那么您需要注意边缘案例。将发生以下翻译:

if test $SHELL_VAR = yes; then        -->  if test = yes; then
if test x$SHELL_VAR = xyes; then --> if test x = xyes; then

其中第一个将生成错误,因为 test 的第一个参数丢失了。第二个没有这个问题。

您的案例翻译如下:

if test "x$SHELL_VAR" = "xyes"; then  -->  if test "x" = "xyes"; then

至少对于 POSIX 兼容的 shell,x 实际上是多余的,因为引号导致空参数和包含空格的参数都被解释为单个对象。

关于unix - 为什么shell脚本比较经常使用x$VAR = xyes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/174119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com