有人告诉我,空格在bash
其他 shell 脚本中很重要,除非我知道自己在做什么,否则我不应该更改空格的存在。“改变存在”是指在两个非空格字符之间插入一个空格或删除两个非空格字符之间的空格,例如更改var="$val"
为var ="$val"
或反之亦然。我想问一下
是否存在在 shell 脚本中使用单个空格或使用多个连续空格会产生影响的情况?.
(当然,在引号中插入/删除空格会有所不同,例如从echo "a b"
to更改echo "a b"
或反之亦然。我正在寻找除了这个简单示例之外的示例。)
我遇到过这个问题,但那个问题是关于在两个非空格字符之间添加和删除空格,我知道很多例子会有所作为。
任何帮助,将不胜感激。如果可能,包括更多种类的贝壳。
这可能是作弊,但这是:
与此不同:
即使空格不在引号中。;-)
更令人困惑的是,这:
与此不同:
即使它们看起来相同!
在引号之外,shell 使用空格(空格、制表符、换行符、回车符等)作为单词/标记分隔符。这意味着:
每个“事物”之间的实际空白字符数无关紧要,只要至少有一个。
如果我们不讨论空格字符(
U+0020
),而是任何空格字符(U+0020
、\n
、\t
等),那么我会想到一个特殊情况:Here-Documents。此代码(使用空格):
将打印:
但是这段代码(使用标签):
将打印:
那是因为(如 POSIX 所述):
它在编写赋值语句时也有影响。就像我说它
FOO=xyz
会创建一个名为FOO
value的环境变量xyz
,但如果我用空格分隔等号,它会认为我正在调用一个名为FOO
arg的程序=xyz
。因此,当涉及到某些语法时,它确实很重要。我遇到了“空间”的一个很好的例子,并想在这里分享。由于 i 介于 100 和 1000 之间,以下条件不会评估为真。
注意 1000 和右方括号之间缺少空格
但是当它更改为如下所述时,它会按预期工作。