shell中单引号、双引号、反斜杠简说
发布时间:2020-12-15 16:30:57 所属栏目:安全 来源:网络整理
导读:需求: ssh远程修改文件,变量从文件中获取,插入远程服务器的文件里 shell脚本中的单引号和双引号一样都是字符串的界定符,而不是字符的界定符。单引号用于保持引号内所有字符的字面值,即使引号内的和回车也不例外,但是字符串中不能出现单引号。(注意是
需求:ssh远程修改文件,变量从文件中获取,插入远程服务器的文件里
shell脚本中的单引号和双引号一样都是字符串的界定符,而不是字符的界定符。单引号用于保持引号内所有字符的字面值,即使引号内的和回车也不例外,但是字符串中不能出现单引号。(注意是所有,只是单引号本身不能够出现在其中)。
双引号用于保持引号内所有字符的字面值(回车也不例外),但以下情况除外:
从网上多个贴上发现,我一直在范一个错误,高估了shell的对引号的处理逻辑
对于引号来说,第一个引号出现,到第二个引号算作一对,并不会聪明的去判断其实第一个引号和第四个引号才是一对。
1、单引号
单引号用于保持引号内所有字符的字面值,即使引号内的和回车也不例外,但是字符串中不能出现单引号
当shell碰到第一个单引号时,它忽略掉其后直到第二个单引号的所有特殊字符
2、双引号
在双引号内,不被忽略的符号:`、$、
3、反引号
命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。shell中有两种方法作命令替换:把shell命令用反引号或者$(...)结构括起来,其中,$(...)格式受到POSIX标准支持,也利于嵌套。
反引号和$()的功能是命令替换,将反引号或$()中的字符串做为命令来执行,我们在用shell编程时经常用的到 将系统命令的执行结果赋给一个变量
但反引号内不能再引用反引号,而$()中可以引用反引号
[root@app bin]# s=$(echo date)
[root@app bin]# echo $s
date
[root@app bin]# s=$(echo `date`)
[root@app bin]# echo $s
Sat Aug 12 11:35:20 CST 2017
4、反斜杠
反斜杠一般用作转义字符,或称逃脱字符,linux如果echo要让转义字符发生作用,就要使用-e选项,且转义字符要使用双引号
echo -e "n"
反斜杠的另一种作用,就是当反斜杠用于一行的最后一个字符时,shell把行尾的反斜杠作为续行,这种结构在分几行输入长命令时经常使用。
示例:
1、单引号里存在单引号
[root@app bin]# echo $''' ' [root@app bin]# echo -e '047' '
2、处理文件中存在单引号
[root@app package]# echo "mmm'sss" | sed s#'# 47#g mmm047sss [root@app package]# echo "mmm'sss" | sed 's/'"'"/" |