bash中“”和“”之间的区别

sps

我试图弄清楚“”和“”之间的区别。

当我将它们一起使用时,echo它们都会产生相同的结果,

sps@sps-Inspiron-N5110:~$ echo Hello    world
Hello world
sps@sps-Inspiron-N5110:~$ echo "Hello   world"
Hello   world
sps@sps-Inspiron-N5110:~$ echo 'Hello   world'
Hello   world
sps@sps-Inspiron-N5110:~$ 

是否有需要使用其中一种的特定情况?

谢谢。

埃利亚·卡根(Eliah Kagan)

bash(Ubuntu的默认交互式shell)中,用单引号('引起的所有内容均按字面引用,直到下一个'被用作结束引号。相反,在双引号"内执行了几种外壳扩展

  • 参数扩展(使用$...${...}):

    ek@Io:~$ echo '$HOME ${USER^^*} ${SHELL%%+([[:alnum:]])}'
    $HOME ${USER^^*} ${SHELL%%+([[:alnum:]])}
    ek@Io:~$ echo "$HOME ${USER^^*} ${SHELL%%+([[:alnum:]])}"
    /home/ek EK /bin/
    

    这是"shell脚本中引号的常见用例特别是,您可能已经看到循环遍历文件名,在双引号内扩展变量的循环,因此该变量确实得到了扩展,但没有将其值拆分为单独的单词。例如,这样的命令可能会帮助我在准备大量要移动的媒体文件时跟踪情况:

    ek@Io:~$ for d in to\ *; do ls -ld "$d"; du -sh "$d"; done
    drwxr-x--- 856 ek ek 32768 Mar 29 10:47 to Albums (partial)
    308G    to Albums (partial)
    drwxrwxr-x 1191 ek ek 40960 Mar 11 12:56 to Books
    21G to Books
    
  • 命令替换(带有$(...)`...`)和算术扩展(带有$((...))):

    ek@Io:~$ echo '$(date)      `uname -r`      $((2+2))'
    $(date)      `uname -r`      $((2+2))
    ek@Io:~$ echo "$(date)      `uname -r`      $((2+2))"
    Sat Apr  4 20:42:37 EDT 2015      3.19.0-11-generic      4
    
  • \支持使用转义单个字符,并且在"引号中可以方便使用,但在较简单的'引号中则不支持(通常是毫无意义的)

    ek@Io:~$ echo '$HOME \$HOME \\\\'
    $HOME \$HOME \\\\
    ek@Io:~$ echo "$HOME \$HOME \\\\"
    /home/ek $HOME \\
    
  • 历史记录扩展使用!(如果启用,通常是在交互式使用shell时使用):

    ek@Io:~$ # this is just a comment (but I could run a command here)
    ek@Io:~$ echo '!!'
    !!
    ek@Io:~$ # this is just another comment (but could be another command)
    ek@Io:~$ echo "!!"
    echo "# this is just another comment (but could be another command)"
    # this is just another comment (but could be another command)
    

另外,使用双引号的最常见原因之一是轻松直观地引出包含单引号的文本(因为a'根本没有特殊的含义,内"引号):

ek@Io:~$ echo "We'll have the dog's fleas gone soon, you'll see."
We'll have the dog's fleas gone soon, you'll see.

最后,尽管您无法转义'内部带'引号的文本,但可以通过使用转义的结束对的引用,并使用继续进行引用来达到相同的结果''\''

ek@Io:~$ echo '"My $PATH ain'\''t what it used to be," said the stevedore'\''s apprentice.'
"My $PATH ain't what it used to be," said the stevedore's apprentice.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

Bash中的$ {}和$()之间的区别

来自分类Dev

bash脚本中$ @和$ *之间的区别

来自分类Dev

;&和;;之间的区别 在bash脚本中

来自分类Dev

Bash中RANDOM和SRANDOM之间的区别

来自分类Dev

Bash中的*和?* glob之间的区别

来自分类Dev

ps输出中bash,-bash和/ bin / bash之间的区别

来自分类Dev

zsh中的别名和bash中的别名之间的区别

来自分类Dev

bash中的“ cat -A”和vim中的“设置列表”之间的区别

来自分类Dev

BASH:“-”和“-”选项之间的区别

来自分类Dev

bash中<<,<<和<<之间有什么区别?

来自分类Dev

bash中<<,<<和<<之间有什么区别?

来自分类Dev

Bash中$(...)和`...`之间有什么区别

来自分类Dev

bash脚本中带有“”和()的数组之间的区别?

来自分类Dev

“ &&”和“;”之间是否有区别 标准BASH终端中的符号?

来自分类Dev

bash中“ a = b”和“导出a = b”之间的区别

来自分类Dev

R中&和&&&之间的区别

来自分类Dev

Python中[]和[[]]之间的区别

来自分类Dev

Slim中“ /”和“!/”之间的区别

来自分类Dev

C ++中+ =和= +之间的区别

来自分类Dev

XPath中// * /和/ * //之间的区别?

来自分类Dev

};之间的区别 和}在C ++中

来自分类Dev

Scala中=>和->之间的区别

来自分类Dev

XPath中//、.//和..//之间的区别?

来自分类Dev

CSS中的:和::之间的区别

来自分类Dev

R中&和&&&之间的区别

来自分类Dev

CSS中“ * =”和“ =”之间的区别

来自分类Dev

Clojure中“->”和“->>”之间的区别

来自分类Dev

VHDL中<=和> =之间的区别?

来自分类Dev

Java中+ =和++之间的区别