1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > linux给变量加单引号 单引号 双引号和不加引号区别

linux给变量加单引号 单引号 双引号和不加引号区别

时间:2023-04-18 23:15:15

相关推荐

linux给变量加单引号 单引号 双引号和不加引号区别

把内容输出出来,可能不会将含有空格的

说一下单引号、双引号和不加引号区别总结说明:

单引号:

可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。

双引号:

特殊符号,有了原本的特殊意思,$LANG $() ``

把双引号内的内容输出出来;如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来。

双引号内命令或变量的写法为`命令或变量`或$(命令或变量)。

无引号:

与双引号类似,支持通配符。字符串视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用,不过最好用双引号替代之。

范例:

##单引号1

2[root@oldboy32-vm1~]#echo'$LANG$PATH$(whichawk){a..d}'

$LANG$PATH$(whichawk){a..d}

##双引号1

2[root@oldboy32-vm1~]#echo"$LANG$PATH$(whichawk){a..d}"

en_US.UTF-8/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin/bin/awk{a..d}

##不加引号1

2

3

4

5

6[root@oldboy32-vm1~]#echo$LANG$PATH$(whichawk){a..d}

en_US.UTF-8/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin/bin/awkabcd

[root@oldboy32-vm1~]#ls*.txt

a.txtcn.txtoldboy_jia.txtoldboy.txtoldgirl.txtzh.txt

[root@oldboy32-vm1~]#ls"*.txt"

ls:cannotaccess*.txt:Nosuchfileordirectory

工作中多用双引号,除非你有明确的特殊的需求。实践演示

实例1:经过反引号的`date`命令,命令行测试1

2

3

4

5

6[root@Oldboyedu~]$echo'`date`'####单引号时看到啥就显示啥。

`date`

[root@Oldboyedu~]$echo"`date`"####双引号,如果里面是变量,会先把变量解析成具体内容再显示

SunMar2209:43:13CST

[root@Oldboyedu~]$echo`date`####对于连续的字符串等内容一般不加引号也可,加双引号比较保险,推荐。

SunMar2209:43:19CST

实例2:脚本中变量定义后,调试时测试1

2

3

4

5

6

7[root@Oldboyedu~]$wxr=testchars###创建一个不带引号的变量

[root@Oldboyedu~]$echo$wxr###不加引号,显示一个变量解析后的内容

testchars

[root@Oldboyedu~]$echo'$wxr'###单引号,显示一个变量本身

$root

[root@Oldboyedu~]$echo"$wxr"###双引号,一个变量内容,引号内可以是变量、字符串等

testchars

实例3:脚本重定义变量测试1

2

3

4

5

6

7[root@Oldboyedu~]$echo$wxr

[root@Oldboyedu~]$wxr=thisistestchars###不加引号无法定义。shell会把is解释成命令。

-bash:is:commandnotfound

[root@Oldboyedu~]$wxr="thisistestchars"

[root@Oldboyedu~]$echo$wxr

thisistestchars

结论:一般应用时,对于变量的定义,我们一般加双引号。

实例4:grep过滤字符串例子1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17[root@Oldboyedu~]$cat>grep.log<

>testchars

>wxr

>wxrlyy

>EOF

[root@Oldboyedu~]$catgrep.log

testchars

wxr

wxrlyy

[root@Oldboyedu~]$wxr=testchars

[root@Oldboyedu~]$echo$wxr

testchars

[root@Oldboyedu~]$grep"$wxr"grep.log

testchars

[root@Oldboyedu~]$grep'$wxr'grep.log

[root@Oldboyedu~]$grep$wxrgrep.log

testchars

实例5:grep过滤双引号(转义)例子1

2

3

4

5

6

7

8

9

10

11

12

13

14[root@Oldboyedu~]$cat>wxr.log<

>"test"

>test

>EOF

[root@Oldboyedu~]$catwxr.log

"test"

test

[root@Oldboyedu~]$grep"wxr.log####直接按ctrl+d或ctrl+c取消执行命令

>-bash:unexpectedEOFwhilelookingformatching`"'

-bash:syntaxerror:unexpectedendoffile

[root@Oldboyedu~]$grep"wxr.log

>^C####è停在这里等待输入

[root@Oldboyedu~]$grep\"wxr.log

"test"

实例6:特殊例子:命令行带空格字符串可以不加引号。可以不加引号的例子。1

2

3

4

5

6

7[root@Oldboyedu~]$echoIamwxr>>wxr.txt

[root@Oldboyedu~]$catwxr.txt

Iamwxr

[root@Oldboyedu~]$echo"Iamwxr.test">>wxr.txt

[root@Oldboyedu~]$catwxr.txt

Iamwxr

Iamwxr.test

结论:虽然不加引号可以追加内容到oldboy.txt中,生产环境中,我们习惯用""双引号替代。

实例7:特殊例子:awk调用shell变量涉及引号例子1

2

3

4

5[root@Oldboyedu~]$ett=123

[root@Oldboyedu~]$awk'BEGIN{print'$ett'}'

123

[root@Oldboyedu~]$awk'BEGIN{print"$ett"}'

$ett

###提示:以上结果正好和前面的结论相反,这是awk调用shell变量的特殊用法。1

2

3

4

5

6

7

8

9[root@Oldboyedu~]$ett='abc'

[root@Oldboyedu~]$echo$ett

abc

[root@Oldboyedu~]$awk'BEGIN{print"$ett"}'

$ett

[root@Oldboyedu~]$awk'BEGIN{print'$ett'}'

[root@Oldboyedu~]$awk'BEGIN{print"'$ett'"}'

abc

##提示:这个例子特殊了一点。有关awk调用shell变量参考:

一道实用linux运维问题大的9钟shell解答方法。总结论很多时候,总结的结论未必适合所有情况。但是,总结小结论,便于我们学习知识和对知识的深刻理解,因此推荐大家多做总结。

不要太纠结于结论,结论毕竟不是真理,知识我们学习过程的产物。就像数学里的平行线一样,在初中定义就是不相交的两条直线就是平行线,到了高中这个结论就是错的了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。