本文介绍:
转义:引用的一种:可以消除元字符的特殊含义
了解引用:部分引用:保留原生的字符形式;全引用:消除元字符的作用
命令替换:可以将命令的标准输出作为值赋给某个变量。命令输出赋值:$()、变量输出:${}。
一. 转义
shell中有两类字符:普通字符、元字符:具有特殊含义,在使用时用作特殊功能,比如$。
为了消除元字符的特殊含义,需要进行转义。
转义:在元字符前面添加"\",反斜杠。
#试图打印“$Dollar”字符串的错误演示
[root@localhost ~]# echo $Dollar
---> 此处打印为空,因为Shell尝试打印出变量Dollar的值,但是这个变量并没有声明,所以打印空行#使用转义字符转义$字符
[root@localhost ~]# echo \$Dollar
$Dollar
#更多的例子
#打印乘号。如果不用转义符转义*号,则*号会作为一般的通配符使用,结果是将工作目录中的所有目录和文件名替换它
[root@localhost ~]# echo 8 \* 8 =64
8 * 8 =64
#句子中含有引号。如果不用转义符转义'单引号,则Shell会等待出现另一个单引号才能结束echo进程
[root@localhost ~]# echo john\'s cat
john's cat
二. 引用
简介:
引用是将字符串用某种符号括起来,以防止特殊字符被解析为其他意思。
一共有四种引用符:双引号,单引号,反引号(`)和转义符(\)。
部分引用
指使用双括号括起来的引用,其中$符,反引号(`),转义符\,仍然会被解析为特殊意义。
bash-3.2$ VAR04="A B C"
#直接打印变量时,输出内容只保留了每个字母间一个空格
bash-3.2$ echo $VAR04
A B C
bash-3.2$ echo "$VAR04"
A B C
注意:使用双引号扩起的输出内容和变量定义时的内容完全一致。
全引用
指单引号括起来的引用,单引号中任何字符都被当作普通字符,但是单引号中不能再使用单引号。
[root@localhost ~]# echo '$VAR03'
$VAR03
如果全引用括起的字符串中还含有单引号,就会出现问题,因为Shell无法区分哪个单引号是引用的结束符。有以下两种方式解决
[root@localhost ~]# echo 'It'\''s a dog'
It's a dog
[root@localhost ~]# echo "It's a dog"
It's a dog
三. 命令替换
指将命令的标准输出作为值赋给某个变量。
Shell中有两种方式可以完成命令替换,一种是反引号(`),一种是$(),使用例子如下:
[root@tbds-10-1-0-38 log]# var_time=$(date)
[root@tbds-10-1-0-38 log]# var_time=`date`
#使用变量通过 ${变量名}
[root@tbds-10-1-0-38 log]# echo ${var_time}
Mon Oct 12 19:48:33 CST 2020
换行保留
[root@tbds-10-1-0-38 log]# var_logs_name=$(ll)
[root@tbds-10-1-0-38 log]# echo ${var_logs_name}
total 90320 -rw-r--r-- 1 tbds tbds 61253302 Oct 12 19:57 application.log -rw-r--r-- 1 tbds tbds 0 Sep 26 00:29 audit.log -rw-r--r-- 1 tbds tbds 507 Oct 12 11:21 boot.log -rw-r--r-- 1 tbds tbds 1096 Sep 28 12:07 dataexploit.log -rw-r--r-- 1 tbds tbds 31199786 Oct 12 19:57 error.log drwxr-xr-x 4 tbds tbds 4096 Oct 2 00:00 history -rw-r--r-- 1 root hadoop 75 Oct 12 19:10 nameSpace1.sh -rw-r--r-- 1 root hadoop 130 Oct 12 19:25 nameSpace2.sh
[root@tbds-10-1-0-38 log]# var_logs_name=$(ll)
[root@tbds-10-1-0-38 log]# echo "${var_logs_name}"
total 90320
-rw-r--r-- 1 tbds tbds 61254541 Oct 12 19:57 application.log
-rw-r--r-- 1 tbds tbds 0 Sep 26 00:29 audit.log
-rw-r--r-- 1 tbds tbds 507 Oct 12 11:21 boot.log
-rw-r--r-- 1 tbds tbds 1096 Sep 28 12:07 dataexploit.log
-rw-r--r-- 1 tbds tbds 31199786 Oct 12 19:57 error.log
drwxr-xr-x 4 tbds tbds 4096 Oct 2 00:00 history
-rw-r--r-- 1 root hadoop 75 Oct 12 19:10 nameSpace1.sh
-rw-r--r-- 1 root hadoop 130 Oct 12 19:25 nameSpace2.sh
嵌套使用
$()支持嵌套,``:不支持嵌套。
$()仅在bash shell中有效,反引号在多种UNIX Shell中都可使用
lianggao@bogon Downloads % Fir_File_Lines=$(wc -l $(ls | sed -n '1p'))
lianggao@bogon Downloads % echo ${Fir_File_Lines}
352 capacity-scheduler.xml