为什么不回声“Hello World!”声明按预期工作?

时间:2016-02-14 00:11:43

标签: string bash syntax

我正在学习Bash脚本的基础知识。如果我没有弄错的话,没有定界并用双引号(I will tell the logic instead of code here follow these works. )分隔的字符串几乎以相同的方式解释,因此,作为字母数字字符串;其中的变量被扩展。另一方面,由单引号(")分隔的字符串不会扩展变量,这是将它们与前面提到的变量进行比较的主要区别。 在终端上练习一下,我注意到一个语句不像我预期的那样工作。正如您在此示例中看到的那样:

'

最后一个语句不打印与前一个相同的字符串,截断感叹号。谁能解释一下这个字符删除的原因? 如果它有用,我在Mac OS X v.10.9下运行所有​​这些。

2 个答案:

答案 0 :(得分:3)

如果在Bash中启用了该功能,则感叹号用于扩展命令历史记录。它们需要在单引号内,或使用\!进行转义。请参阅https://unix.stackexchange.com/questions/3747/understanding-the-exclamation-mark-in-bash#

答案 1 :(得分:3)

这真的是一个评论:

引用和取消引用字符串的方式有很大不同:未引用的字符串受shell的进一步扩展

分词:shell将对不带引号的字符串进行标记,并使用单个空格连接标记

text="my name is
   Inigo   Montoya"
echo "$text"
echo $text

输出

my name is
   Inigo   Montoya
my name is Inigo Montoya

注意如何为未加引号的版本折叠空白

文件名生成:shell文件名模式(又名" glob"模式)将在不带引号的字符串中展开:

text="files *"
echo "$text"
echo $text

输出

files *
files [list of all files in your current directory ...]

可以使用set -fset +f

来控制此行为

有关所有血腥细节,请阅读bash手册:

这篇规范文章: