现在的位置: 首页 > 综合 > 正文

shell转义符学习笔记

2018年05月16日 ⁄ 综合 ⁄ 共 2181字 ⁄ 字号 评论关闭
转义(\) :
转义是一种引用单个字符的方法.一个具有特殊含义的字符前边放上一个转义符(\)就告诉shell 这个字符失去了特殊的含义. 值得注意的是,在某些特定的命令和工具中,比如echo和sed, 转义符往往会起到相反的效果, 它反倒有可能引发出这个字符特殊的含义.
[root@rong2 test]# echo hello\!
hello!
[root@rong2 test]# echo -e x\ty
xty
[root@rong2 test]# echo -e "x\ty"
x       y

[root@rong2 test]# echo "why can"\'"t I write"
why can't I write
" 单词分隔", 在这个上下文中意味着,将一个字符串分隔为一些分离的参数.
单引号操作总体上和"" 很像,但不允许引用变量.因为$ 的特殊含义被关闭了.在'' 中除了', 其他字符都没有特殊的含义了.所以单引号比双引号严格.因为即使是\, 在''中都被关闭了,所以你想在'' 中显示'的含义,将得不到预期的效果.

[root@rong2 test]# var="'(]\\{}\$\""
[root@rong2 test]# echo $var
'(]\{}$"
[root@rong2 test]# echo "$var"
'(]\{}$"                                  #并没有什么不同
[root@rong2 test]# IFS='\'                #
IFS 是linux的一个全局变量。其实就是个空格分隔符(默认),可以自己更改
[root@rong2 test]# echo $var
'(] {}$"
[root@rong2 test]# echo "$var"
'(]\{}$"                                  #\被换成了空格

对于特定的转义符的特殊的含义
在echo和sed 中所使用的
\n   意味着新的一行
\r   回车
\t   tab 键
\v   vertical tab(垂直tab),查前边的 Ctl-K
\b   backspace, 查前边的Ctl-H
\a   "alert"(如beep或flash)
\0xx 转换成8 进制 ASCII 解码,等价于oxx

Example:

#####Start Script######

#!/bin/bash
echo;echo
echo "\v\v\v\v"                       #逐字的打印\v\v\v\v

echo "============="
echo "VERTICAL TABS"
echo -e "\v\v\v\v"                    #使用-e选项的echo来打印转义符

echo "============="
echo "QUOTATION MARK"
echo -e "\042"                       #打印" (引号, 8 进制的ASCII  码就是42)

echo "============="
echo;echo "NEWLINE AND BEEP"
echo $'\n'                           # 新行
echo $'\a'                           # Alert (beep)

echo "============="
echo "QUOTATION MARKS"
echo $'\t\042\t'                     #双引号(")

echo "============="
echo
quote=$'\042'                        ## \042是",给quote变量赋值
echo "$quote This is a quoted string, $quote and this lies outside the quotes."

triple_underline=$'\137\137\137'     # 137是8进制的ASCII  码'_'
echo "$triple_underline UNDERLINE $triple_underline"
echo
ABC=$'\101\102\103\010'             #101,102,103是8进制的码A,B,C.
echo $ABC
echo;echo
escape=$'\033'                      #033是8进制码for escape
echo "\"escape\" echoes as $escape"
echo;echo
exit 0
###########End Script############

\"   表达引号本身
    echo "Hello"                  # Hello
    echo "\"Hello\", he said."    # "Hello", he said.
 
\$   $ 号本身,跟在\$ 后的变量名,将不能扩展
    echo "\$variable01"  # 结果是$variable01
 
\\   \号本身.
   echo "\\"  # 结果是\
   echo "\"   # 这会出现第 2 个命令提示符,说白了就是提示你命令不全,你再补个"就
   # 如果是在脚本里,就会给出一个错误.

本文出自 “Mr_Z” 博客,请务必保留此出处http://zhangrong.blog.51cto.com/2196532/951467

抱歉!评论已关闭.