Linux - 引用机制

Linux - 引用机制 首页 / Linux入门教程 / Linux - 引用机制

在本章中,我们将详细讨论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脚本使用单引号-

链接:https://www.learnfk.comhttps://www.learnfk.com/linux/linux-quoting-mechanisms.html

来源:LearnFk无涯教程网

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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

OpenResty从入门到实战 -〔温铭〕

TypeScript开发实战 -〔梁宵〕

NLP实战高手课 -〔王然〕

正则表达式入门课 -〔涂伟忠〕

重学线性代数 -〔朱维刚〕

小马哥讲Spring AOP编程思想 -〔小马哥〕

技术面试官识人手册 -〔熊燚(四火)〕

说透元宇宙 -〔方军〕

Python实战 · 从0到1搭建直播视频平台 -〔Barry〕

好记忆不如烂笔头。留下您的足迹吧 :)