相关疑难解决方法(0)

为什么 bash 测试对空格如此挑剔?

作为一名主要的 Java 程序员,我发现 bash if-then构造非常令人困惑,尤其是在空格方面。谁能解释为什么第一个有效,而第二个或第三个无效?

#works
if [ -n $1 ]; then echo "parameterized"; fi

#output: ./links: Zeile 1: [-n: Kommando nicht gefunden.
if [-n $1 ]; then echo "parameterized"; fi

#output: ./links: Zeile 1: [: Fehlende `]'
if [ -n $1]; then echo "parameterized"; fi
Run Code Online (Sandbox Code Playgroud)

shell bash whitespace test

10
推荐指数
2
解决办法
7025
查看次数

bash 中未加引号的空变量扩展为什么?

为了返回退出状态,未加引号、未声明的变量扩展到什么值0

这是我遇到的特定情况的示例:

[ -n $var ]; echo $?
0

[ -n "$var" ]; echo $?
1
Run Code Online (Sandbox Code Playgroud)

var在这两个测试中,都没有声明该变量。我本可以通过使用 进行测试来省去麻烦-z,其中引用或不引用显然没有什么区别,但我遇到了这种特殊情况,我开始想知道。我更深入地研究了 bash 执行的所有扩展,但找不到对此行为的任何解释。

作为一般规则,我通常引用变量,但希望这种行为的原因可以帮助我更好地理解引用。

bash quoting

1
推荐指数
1
解决办法
304
查看次数

标签 统计

bash ×2

quoting ×1

shell ×1

test ×1

whitespace ×1