题主好. Python 中单引号与双引号都可以用来定义字符串, 并且还可以能过相互配合简化定义. 具体地可以参看如下示例:
s1 = 'Python' 和 s2 = "Python" , 则 s1 和 s2 是完全相同的
s1 = 'Python is \'super\' nice' 和 s2 = "Python is 'super' nice" 是完全相同的, 并且后者同时使用单双引号使定义更加清楚简炼
反之, 也可以在单引号中使用双引号.
Linux的shell中存在一些特殊字符(保留字),我们将这些具有一些特殊功能的字符叫做meta(元字符),还有一些普通的,没有特殊功能的字符我们叫做literal(文字)。bash中,常使用的引用有如下三种方法:
1、单引号:单引号中的所有meta均被当作普通字符使用。
2、双引号:在双引号中的大部分meta都被当作普通字符,但某些字符的功能保留(如$)。
3、反斜线:只有紧接在反斜线(跳脱字符)之后的单一meta才被当作普通字符。
Windows的cmd下,同样也有类似的概念。单引号和双引号有时候没有区别(可以使用任意一个),有时候只能用特定的一个。
这篇文章主要记录python脚本入参带有&&符号时,在Linux和Windows平台的不同表现。
编写python脚本quote.py,内容如下:
$ cat quote.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
print(sys.argv[1])
1、参数不使用引号
$ python quote.py whoami&&whoami
whoami
sunday
可以看出,第一个whoami被当作入参传给脚本,第二个whoami当作bash命令,在终端执行。
2、参数使用单引号
$ python quote.py 'whoami&&whoami'
whoami&&whoami
可以看出,&&被当作普通字符,whoami&&whoami作为参数传给了脚本。
3、参数使用双引号
$ python quote.py "whoami&&whoami"
whoami&&whoami
可以看出,&&被当作普通字符,whoami&&whoami作为参数传给了脚本。
在Windows执行脚本,用户为winsunday:
1、参数不使用引号
C:\test>python quote.py whoami&&whoami
whoami
winsunday
可以看出,第一个whoami被当作入参传给脚本,第二个whoami当作CMD命令,在终端执行。
2、参数使用单引号
C:\test>python quote.py 'whoami&&whoami'
'whoami
'whoami'' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
可以看出,单引号被当作普通字符,&&对命令进行了分割,'whoami作为第一个参数被传给脚本;whoami'被认为是一个命令进行执行(报错了)。
3、参数使用双引号
C:\test>python quote.py "whoami&&whoami"
whoami&&whoami
可以看出,双引号时&&被当作普通字符,whoami&&whoami作为整体被传给脚本。
单引号和双引号用法差不多,Python不做明显区分,大部分情况下是一样的(比如"1"=='1'甚至"1" is '1'的返回值都为True)。但是有的时候最好用双引号,因为英文的'也可以用于单词,比如I'm等。中文就无所谓了。
这位答主对三引号的解释不太对。三引号确实可以用作多行注释,因为它不赋予给任何一个变量,Python运行时就是看一眼但对它啥都不干,它作为注释的好处就在于可以避免#需要每行都打的问题。
但是三引号也可以作为多行字符串使用。比如以下代码:
string="""123
abc
αβγ"""
print(string)
输出这个字符串的时候你就会得到:
123
abc
αβγ
说明它不一定非要是注释。三引号的空行会被转化为"\n",即换行符。它的意义就在于更好地在一行内表示一个字符串。比如上面加粗的代码就可以表示为string="123\nabc\nαβγ"