Wei*_*hou 16 shell shell-script
有人告诉我,空格在bash
或其他 shell 脚本中很重要,除非我知道自己在做什么,否则我不应该改变空格的存在。“改变存在”是指在两个非空格字符之间插入一个空格或删除两个非空格字符之间的空格,例如更改var="$val"
为var ="$val"
或反之亦然。我想问一下
是否存在在 shell 脚本中使用单个空格或使用多个连续空格会产生影响的情况?.
(当然,在引号中插入/删除空格会有所不同,例如从echo "a b"
to更改为,echo "a b"
反之亦然。我正在寻找除这个简单示例之外的示例。)
我遇到过这个问题,但那个问题是关于在两个非空格字符之间添加和删除空格的,我知道很多例子表明它会有所作为。
任何帮助,将不胜感激。如果可能,包括更多种类的贝壳。
rua*_*akh 23
这可能是作弊,但这个:
rm foo\ bar # "delete the file named 'foo bar'"
Run Code Online (Sandbox Code Playgroud)
与此不同:
rm foo\ bar # "delete the files named 'foo ' and 'bar'"
Run Code Online (Sandbox Code Playgroud)
即使空格不在引号中。;-)
更令人困惑的是:
rm \
foo # "delete the file named 'foo'"
Run Code Online (Sandbox Code Playgroud)
与此不同:
rm \
foo # "delete the file named ' ', then run the command 'foo'"
Run Code Online (Sandbox Code Playgroud)
尽管它们看起来一模一样!
cas*_*cas 21
在引号之外,shell 使用空格(空格、制表符、换行符、回车符等)作为单词/标记分隔符。这意味着:
每个“事物”之间的空白字符的实际数量并不重要,只要至少有一个即可。
nxn*_*nev 13
如果我们不谈论空格字符 ( U+0020
),而是谈论任何空白字符 ( U+0020
, \n
, \t
, 等),那么我会想到一种特殊情况:Here-Documents。
此代码(使用空格):
cat <<- 'EOF'
<space><space>foo
EOF
Run Code Online (Sandbox Code Playgroud)
将打印:
foo
Run Code Online (Sandbox Code Playgroud)
但是这段代码(使用标签):
cat <<- 'EOF'
<tab><tab>foo
EOF
Run Code Online (Sandbox Code Playgroud)
将打印:
foo
Run Code Online (Sandbox Code Playgroud)
那是因为(如 POSIX 所述):
如果重定向运算符是
<<-
,则所有前导 <tab> 字符都应从输入行和包含尾随定界符的行中删除。