• 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#\'#\\\\047#g
    mmm\047sss
    [root@app package]# echo "mmm'sss"  | sed 's/'"'"/"\\\047"'/g'
    mmm\047sss
    [root@app package]# echo "mmm'sss"  | sed "s/'/\\\\047/g"
    mmm\047sss
    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使用单引号还是双引号
     
  • 相关阅读:
    [Android编程心得]Debug的一些技巧
    理解WebKit和Chromium: Chromium for Android
    java compiler level does not match the version of the installed java project facet
    [Android编程心得]Activity的生命周期函数
    GDAL中的SURF算法
    SURF算法学习心得
    遥感图像处理流程
    软件界面建模浅析
    IsPostBack深入探讨
    自定义应用程序配置文件(app.config)
  • 原文地址:https://www.cnblogs.com/loki717/p/7358125.html
Copyright © 2020-2023  润新知