在本章中,我们将详细讨论Shell引用机制。我们将从讨论元字符开始。
元字符
Unix Shell提供了各种元字符,这些元字符在任何Shell脚本中使用时都有特殊的含义,并且除非引号引起,否则会导致终止。
如,?匹配单个字符,而在目录中列出文件,而 * 匹配多个字符。这是大多数Shell特殊字符(也称为元字符)的列表-
* ? [ ] ' "\$; & ( ) | ^ < > new-line space tab
可以在字符前面加上\来引号。
以下示例显示了如何打印 * 或?-
#!/bin/sh echo Learnfk; welcome
执行后,您将收到以下输出-
Hello ./test.sh: line 2: Word: command not found shell returned 127
现在让我们尝试使用带引号的字符-
#!/bin/sh echo Learnfk\; welcome
执行后,您将收到以下输出-
Learnfk; welcome
$ 符号是元字符之一,因此必须加引号以避免被shell特殊处理-
#!/bin/sh echo "I have\$1200"
执行后,您将收到以下输出-
I have $1200
下表列出了四种报价形式-
Sr.No. | Quoting & 描述 |
---|---|
1 |
Single quote(单引号) 这些引号之间的所有特殊字符均失去其特殊含义。 |
2 |
Double quote(双引号) 这些引号之间的大多数特殊字符会失去其特殊含义-
|
3 |
Backslash(反斜杠) 反斜杠后面的任何字符都将失去其特殊含义。 |
4 |
Back quote(反引号) 反引号之间的任何内容都将被视为命令并被执行。 |
单引号
考虑一个包含许多特殊Shell字符的echo命令-
echo <-$1500.**>; (update?) [y|n]
在每个特殊字符的前面加上反斜杠很乏味,并且使该行难以阅读-
echo\<-\$1500.\*\*\>\;\(update\?\)\[y\|n\]
有一种简单的方法可以引用大量字符。在字符串的开头和结尾处加上单引号(')-
echo '<-$1500.**>; (update?) [y|n]'
单引号内的字符被引号,就像每个字符前面都有反斜杠一样。这样,echo命令将以正确的方式显示。
如果单引号出现在要输出的字符串中,则不应将整个字符串放在单引号中,而应在使用反斜杠(\)之前,如下所示:
echo 'It\'s Shell Programming
双引号
尝试执行以下Shell脚本,这个Shell脚本使用单引号-
VAR=ZARA echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
执行后,您将收到以下输出-
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
这不是必须显示的内容。显然,单引号可以防止变量替换。如果您要替换变量值并使反斜杠按预期工作,则需要将命令放在双引号中,如下所示:
VAR=ZARA echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
执行后,您将收到以下输出-
ZARA owes <-$1500.**>; [ as of (07/02) ]
如果单引号出现在要输出的字符串中,则不应将整个字符串放在单引号中,而应在使用反斜杠(\)之前,如下所示:
echo 'It\'s Shell Programming'
反引号
将任何Shell命令放在反引号之间将执行该命令。
这是将任何Shell command 放在反引号之间的简单语法-
var=`command`
在下面的示例中,将执行 date 命令,并将产生的输出存储在DATA变量中。
DATE=`date` echo "Current Date: $DATE"
执行后,您将收到以下输出-
Current Date: Thu Jul 2 05:28:45 MST 2021
参考链接
https://www.learnfk.com/linux/linux-quoting-mechanisms.html
标签:字符,教程,Shell,引号,无涯,echo,斜杠,Linux,单引号 From: https://blog.51cto.com/u_14033984/8571897