加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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/'"'"/"47"'/g'
mmm047sss
[root@app package]# echo "mmm'sss"  | sed "s/'/\047/g"
mmm047sss
3、单引号里可以打印变量吗?
[root@app ~]# echo '"$key"'
"$key"
[root@app ~]# echo ''$key''
abc
4、远程处理文件
命令列子:ssh $ip " echo '$key=$value' >> file "或者ssh $ip " sed -i 's/^$key.*/$key=$value/g' >> file "
补充:$value变量包含任意字符,即
讨论:ssh里的sed或者echo使用单引号还是双引号

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读