shell脚本 双引号 单引号
在Shell脚本中,双引号和单引号都可以用来引用字符串,但它们有一些区别:
双引号:允许变量扩展,即在双引号中可以引用变量的值。
单引号:禁止变量扩展,即在单引号中引用的任何内容都会被视为字符串的一部分,而不会解释为变量或命令。
#!/bin/bash
# 定义变量
name="World"
# 使用双引号
echo "Hello, $name" # 输出:Hello, World
# 使用单引号
echo 'Hello, $name' # 输出:Hello, $name,而不是Hello, World
11
在上述示例中,第一个echo命令使用双引号,输出了变量的值(World)。第二个echo命令使用单引号,输出了字符串本身(Hello, $name),并没有解释$name为变量。
单引号’ ',单引号又称为强引,不具有变量置换的功能,所有的任意字符还原为字面意义,实现屏蔽Shell元字符的功能;
双引号" ",双引号又称为弱引,具有变量置换的功能,保留$(使用变量前导符), (转义符), `(反向引号)元字符的功能;
2.4 引号的嵌套
单引号字符串中可以包含双引号,双引号字符串中可以包含单引号。例如,echo ‘He said, “Hello”’ 和 echo “It’s a nice day” 都是合法的。
只要记住一点就行了: 单引号一般会保留原样输出。
变量用双引号括起来的意义
如果变量不用双引号括起来,比如echo $a,那么隐含的意义就是,把$a变量的字符串,按照空格、制表符、换行符等符号来分割开。然后把这些分割后的每一项再按 glob 模式展开,最后把这些值,再用一个空格重新连接起来,并打印出来。
如果碰巧$a变量的字符串中,有连续两个空格符号,或者有制表符,那么echo $a就与程序员的思路出现了不一致。比如下例:
qilei@AFAAW-704030720:~$ cat a.sh
#!/bin/bash
a="1 2 3 4"
echo $a
echo "$a"
qilei@AFAAW-704030720:~$ ./a.sh
1 2 3 4
1 2 3 4
qilei@AFAAW-704030720:~$
推荐今后编程中,变量必须用双引号括起来
bash编程里的变量,全部用双引号括起来。这样更符合程序员的思路。
比如echo “$a”
举一反三,脚本命令的参数变量,也是同理的。