我试图在 bash 脚本中创建一个文本文件。
该echo
命令跨越多行并有一些双引号“”。
#!/bin/bash
echo "blabla bla bla bla "blabla"
bla bla " bla bla bla"
and so on and so on
bla bla
blu bla "bla bla bla "
bla bla" > /root/bin/bla
Run Code Online (Sandbox Code Playgroud)
命令中有很多双引号 ""echo
是不可取的。
我做到了
#!/bin/bash
echo 'blabla bla bla bla "blabla"
bla bla " bla bla bla"
and so on and so on
bla bla
blu bla "bla bla bla "
bla bla' > /root/bin/bla
Run Code Online (Sandbox Code Playgroud)
我想知道双引号 " 和单引号 ' 之间是否有任何区别
哪个优先级更高?仅仅是因为它们在视觉上不同吗?
从bash 手册:
3.1.2.2 单引号
将字符括在单引号 (''') 中会保留引号内每个字符的字面值。单引号之间不能出现单引号,即使前面有反斜杠。
3.1.2.3 双引号
用双引号 ('"') 将字符括起来会保留引号内所有字符的字面值,但 '$'、'`'、'\' 和启用历史扩展时的 '!' 除外。字符 '$' 和 '`' 在双引号内保留其特殊含义(请参阅 Shell Expansions)。反斜杠仅在后跟以下字符之一时保留其特殊含义:'$'、'`'、'"'、' \' 或换行符。在双引号内,后跟这些字符之一的反斜杠将被删除。没有特殊含义的字符前面的反斜杠保持不变。双引号可以通过在双引号前面加上反斜杠来引用。如果启用,将执行历史扩展,除非'!' 出现在双引号中的是使用反斜杠进行转义。'!' 前面的反斜杠 没有被移除。
以下是上述的一些实际演示:
$ var=foo
$ echo "$var"
foo
$ echo '$var'
$var
Run Code Online (Sandbox Code Playgroud)
$ echo "\\"
\
$ echo '\\'
\\
Run Code Online (Sandbox Code Playgroud)
$(
, `
),但单引号不能:$ echo "$(echo bar)"
bar
$ echo '$(echo bar)'
$(echo bar)
Run Code Online (Sandbox Code Playgroud)