• 命令中的特殊字符


    一、字符串引用符双引号和单引号

    1、双引号

    双引号“”通常用来表示引用一个字符串,有时能屏蔽一些标点等特殊符号。在命令中使用双引号时,一般表示引用的部分是一个不可分割的整体。

    通常可以理解为所有放入双引号中的内容都按照字符串来处理,除非有另一个引用号告知某个特殊字符串具有特殊含义(例如变量等)。

    (1)屏蔽特殊字符

    [root@localhost ~]# echo Tom Jim Kate Jack
    Tom Jim Kate Jack

    [root@localhost ~]# echo Tom Jim Kate Jack; Mary Roman
    Tom Jim Kate Jack
    bash: Mary: command not found

    上面这个示例中包含了特殊字符“;”(分号表示一个命令的结束、另一个命令的开始),因此引起了系统的误解。像这种情况一般应该使用双引号表示字符串的引用:

    [root@localhost ~]# echo "Tom Jim Kate Jack; Mary Roman"
    Tom Jim Kate Jack; Mary Roman

    (2)在双引号中使用其他引用符

    如果在双引号引用的字符串中引用,应该使用其他引用符号。例如使用“$”引用变量:

    [root@localhost ~]# NAME="Mary"
    [root@localhost ~]# echo "Tom Jim Kate Jack; Mary Roman $NAME"
    Tom Jim Kate Jack; Mary Roman Mary

    除了变量引用符之外,还可以使用命令输出引用符反引号(倒引号):

    [root@localhost ~]# echo "Now time:`date`"
    Now time:Fri Dec  6 08:09:33 CST 2013

    (3)在命令中使用双引号

    在一些命令中还经常使用双引号避免shell误解选项的含义等。例如:

    [root@localhost ~]# NAME="Tom Jim Kate Jack; Mary Roman Mary"
    [root@localhost ~]# echo $NAME | grep Tom Jim
    grep: Jim: No such file or directory
    bash: echo: write error: Broken pipe
    [root@localhost ~]# echo $NAME | grep "Tom Jim"
    Tom Jim Kate Jack; Mary Roman Mary

    2、单引号

    单引号‘’的使用方法和作用与双引号基本上一致(但有区别,见3),都是将引号中的内容都当作字符串来处理。另外,单引号通常在一些特殊命令中与双引号配合,表示引用中的引用(shell中不允许一条命令中的两个引用号都使用双引号或单引号)。

    (1)使用上面的示例:

    [root@localhost ~]# echo $NAME | grep 'Tom Jim'
    Tom Jim Kate Jack; Mary Roman Mary

    (2)需要嵌套使用双引号时,但是shell不允许,此时使用的方法是:双引号内用单引号

    [root@localhost ~]# awk 'BEGIN{system("date +'%Y%m%d-%T'")}'
    20131206-08:26:05

    3、双引号与单引号的区别

    (1)双引号具有变量置换的功能,而单引号不具有变量置换的功能:

    [root@localhost ~]# NAME="Tom"
    [root@localhost ~]# echo "Your name is:$NAME"
    Your name is:Tom
    [root@localhost ~]# echo 'Your name is:$NAME'
    Your name is:$NAME

    (2)双引号具有命令置换的功能,而单引号不具有命令置换的功能:

    [root@localhost ~]# echo 'Now time:`date`'
    Now time:`date`
    [root@localhost ~]# echo "Now time:`date`"
    Now time:Fri Dec  6 08:48:58 CST 2013

    总之,单引号内的内容会原原本本的保持(也可以说单引号可以屏蔽其内的所有特殊字符),而双引号内的内容会由于变量引用$或命令引用``而变化。

    二、命令引用符反引号和命令转换符$()

    反引号``有时也称为倒引号,这个键通常位于键盘的Tab键上方、数字键1的左边。反引号主要用来引用一些函数、命令输出等,执行时系统会尝试将反引号中的内容当作一个命令去执行。

    提示:如果在一条命令中出现了命令引用符或命令转换符,系统会首先执行其内的命令。

    (1)命令中的命令

    [root@localhost ~]# ls -l `cat /etc/shells`
    -rwxr-xr-x 1 root root  716972 Jul 12  2006 /bin/bash
    lrwxrwxrwx 1 root root       4 Nov 12 23:57 /bin/csh -> tcsh
    -rwxr-xr-x 1 root root 1169832 Jan 16  2007 /bin/ksh
    lrwxrwxrwx 1 root root       4 Nov 12 23:52 /bin/sh -> bash
    -rwxr-xr-x 1 root root  343756 Oct 31  2006 /bin/tcsh
    -rwxr-xr-x 1 root root    3236 Jun 25  2007 /sbin/nologin
    [root@localhost ~]# ls -l $(cat /etc/shells)
    -rwxr-xr-x 1 root root  716972 Jul 12  2006 /bin/bash
    lrwxrwxrwx 1 root root       4 Nov 12 23:57 /bin/csh -> tcsh
    -rwxr-xr-x 1 root root 1169832 Jan 16  2007 /bin/ksh
    lrwxrwxrwx 1 root root       4 Nov 12 23:52 /bin/sh -> bash
    -rwxr-xr-x 1 root root  343756 Oct 31  2006 /bin/tcsh
    -rwxr-xr-x 1 root root    3236 Jun 25  2007 /sbin/nologin

    (2)在字符串中嵌套和使用一个命令的情况:

    [root@localhost ~]# echo "Now time:`date +'%T'`"
    Now time:08:35:44

    [root@localhost ~]# echo "Now time:$(date +'%T')"
    Now time:08:55:35

    三、变量引用符美元符号$

    [root@localhost ~]# date=`date`
    [root@localhost ~]# echo "Host time is:$date"
    Host time is:Fri Dec  6 09:03:15 CST 2013

    四、反斜杠屏蔽符

    许多时候需要在输出中使用这些特殊字符本身,这时应该使用反斜杠屏蔽其特殊的含义。

    (1)例如要使用美元符号表示货币:

    [root@localhost ~]# echo "Please pay $15.50."
    Please pay $15.50.

    其实也可以使用单引号‘’实现上述目的:

    [root@localhost ~]# echo 'Please pay $15.50.'
    Please pay $15.50.

    你要是在上面的$前加入反斜杠,连反斜杠的功能都被单引号‘’屏蔽掉了,反斜杠也会原原本本的输出:

    [root@localhost ~]# echo 'Please pay $15.50.'
    Please pay $15.50.
  • 相关阅读:
    对软件未来走向的看法
    ubuntu:configure error:cannot find ssl libraries
    linux CentOS普通用户无法从ssh登录解决方案
    Can't locate IPC/Run.pm in @INC
    我也学erlang(一)
    我也学erlang(二)
    我也学erlang(四)
    第一篇献给church(丘奇)
    出现epoll failed: Bad file descriptor的原因
    最近看代码的一点总结
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3460770.html
Copyright © 2020-2023  润新知