1、元字符
Linux shell提供了各种元字符,这些元字符在任何 shell 脚本中使用时都具有特殊含义,,并且会导致一个单词的终止,除非被引用。
?
列出目录中的文件时匹配单个字符,*
匹配多个字符。也是大多数 shell 特殊字符(也称为元字符),元字符主要有以下几个:
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
一个字符可以通过在它前面加上\来引用(即代表字符本身)。
例如,
#!/bin/bash
echo Hello; Word
输出:
Hello
./demo.sh: line 2: Word: command not found
shell returned 127
使用\转义:
#!/bin/bash
echo Hello\; Word
输出:
Hello; Word
2、特殊字符的引用
引用符包括 “
(双引号)和 '
(单引号),最基本的用法就是引用字符串。单引号同双引号稍有不同,单引号不支持转义,但是双引号支持。另外,引用还可以用反斜杠(\
)和反引号(`
),具体如下:
1)单引号
引号之间的所有特殊字符都失去了它们的特殊含义。
2)双引号
引号之间的大多数特殊字符失去了它们的特殊含义,但有以下例外:
$
`
\$
\'
\"
\\
3)反斜杠
特殊字符前加上反斜杠后面的任何字符将失去其特殊含义。
4)反引号
反引号之间的任何内容都将被视为命令并被执行。
3、单引号
如果多个特殊字符情况下,使用反斜杠\转义,使得字符串难以阅读,就可以考虑使用单引号('
),例如,
echo \<-\$10.\*\*\>\; \(cjavapy\?\) \[y\|n\]
使用单引号:
echo '<-$10.**>; (cjavapy?) [y|n]'
如果要输出的字符串中出现单引号,则不应将整个字符串放在单引号内,而应在其前面使用反斜杠 (\),
例如,
echo '<-$10.**>; \'(cjavapy?) [y|n]'
4、双引号
双引号去掉了所有字符的特殊含义,但以下字符除外:
$
`
\$
\'
\"
\\
例如,
VAR=CJAVAPY
echo "$VAR IS <-\$10.**>; [ (`date +%m/%d`) ]"
输出:
$VAR IS <-\$10.**>; [ (`date +%m/%d`) ]
单引号可以防止变量替换。如果需要要替换变量值,则需要将命令放在双引号中,如下
VAR=CJAVAPY
echo "$VAR IS <-\$10.**>; [ (`date +%m/%d`) ]"
输出:
CJAVAPY IS <-$10.**>; [ (10/05) ]
如果要输出的字符串中出现双引号,则不应将整个字符串放在双引号内,而应在其前面使用反斜杠 (\
),
例如,
echo "<-$10.**>; \"(cjavapy?) [y|n]"
5、反引号
将shell 命令放在反引号之间都会执行该命令。反引号可以引用一个命令执行的结果。
语法
var=`command`
例如,
DATE=`date`
echo "当前时间: $DATE"
输出:
当前时间: 2021年 10月 05日 星期二 17:10:45 CST