作为一名主要的 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) 为了返回退出状态,未加引号、未声明的变量扩展到什么值0?
这是我遇到的特定情况的示例:
[ -n $var ]; echo $?
0
[ -n "$var" ]; echo $?
1
Run Code Online (Sandbox Code Playgroud)
var在这两个测试中,都没有声明该变量。我本可以通过使用 进行测试来省去麻烦-z,其中引用或不引用显然没有什么区别,但我遇到了这种特殊情况,我开始想知道。我更深入地研究了 bash 执行的所有扩展,但找不到对此行为的任何解释。
作为一般规则,我通常引用变量,但希望这种行为的原因可以帮助我更好地理解引用。