引号

时间:2019-04-16 23:59:04  来源:igfitidea点击:

shell可以识别特殊字符(例如扩展变量和通配符)的含义。比如遇到$var,shell会解析为变量,用变量值代替。

echo "$PATH"
echo "$PS1"
echo /etc/*.conf

但是有时我们不想变量或通配符被解析。例如,不想打印$PATH的值,而是打印一个单词$PATH。
那么可以通过将特殊字符放到单引号中来禁止其被解释器解释。

例如

cho "Path is $PATH"  ## $PATH 将被解析,使用其值替代

或者

echo 'I want to print $PATH' ## 单引号中$PATH 不会被解析,直接输出$PATH

反斜杠

反斜杠()可以改变单引号和双引号的特殊含义,即它将转义或取消下一个字符的特殊含义。

下面的例子将显示文件名双引号:

FILE="/etc/resolv.conf"
echo "File is \"$FILE\" "

下面的例子将保留$

FILE="/etc/resolv.conf"
echo "File is $FILE "

继续下一行的命令

反斜杠()还可以放在行的末尾用来在下一行继续很长的命令:

例如

# Purpose: clean /tmp/$domain
check_temp_clean() {
        [ "$SERVER_MODE" = "daemon" ] || return 1
        [ "$SERVER_MODE"  = "init"    ] && return 0
        # 注意,使用反斜杠字符在下一行继续写未完成的命令
        [ "$SERVER_MODE"  = "clean" \
          -a -e /usr/local/etc/nixcraft/lighttpd/disk_cache.init ] && return 0
        return 1
}

反斜杠()还可以用来保护命令行参数。

比如我们想在HOME目录下查找所有.sh结尾的文件。

find $HOME -name *.sh # 错误

但是这样是会报错的, 通配符星号,我们需要使用反斜杠:

find $HOME -name \*.sh # 正确

或者

find $HOME -name "*.sh" # 正确