`
dengwenwei121
  • 浏览: 36103 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
文章分类
社区版块
存档分类
最新评论

Shell 引用机制

阅读更多

元字符:

UNIX Shell提供各种元字符有特殊的意义,同时利用他们在任何Shell脚本,并导致终止一个字,除非引用。

举个例子: ?匹配一个单一的系统字符,而列出文件中的目录和*匹配多个字符。下面是一个清单shell特殊字符(也称为元字符):

* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab

它与前可能被引用的字符(例如,放置自身) \.

例子:

下面的例子,显示了如何打印 a*或 a?:

#!/bin/sh

echo Hello; Word

这将产生下面的结果。

Hello
./test.sh: line 2: Word: command not found

shell returned 127

现在,让我们尝试使用带引号的字符:

#!/bin/sh

echo Hello\; Word

这将产生以下结果:

Hello; Word

$符号是一个元字符,所以它必须被引用,以避免特殊处理:

#!/bin/sh

echo "I have \$1200"

这将产生以下结果:

I have $1200

是以下四种形式引用:

引用 描述
Single quote All special characters between these quotes lose their special meaning.
Double quote Most special characters between these quotes lose their special meaning with these exceptions:
  • $
  • `
  • \$
  • \'
  • \"
  • \\
Backslash Any character immediately following the backslash loses its special meaning.
Back Quote Anything in between back quotes would be treated as a command and would be executed.

单引号:

考虑echo命令,其中包含许多特殊的shell字符:

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命令将显示正确。

如果要输出一个字符串内出现一个单引号,不应该把单引号内的整个字符串,而不是对子进行使用反斜杠(\)如下:

echo 'It\'s Shell Programming'

反引号:

把反引号之间的任何shell命令将执行命令

语法

下面是一个简单的语法,把反引号之间的任何Shell命令:

例子:

var=`command`

例子:

继执行date命令,产生的结果将被存储在 DATA 变量。

DATE=`date`

echo "Current Date: $DATE"

这将产生以下输出结果:

Current Date: Thu Jul  2 05:28:45 MST 2009

分享到:
评论

相关推荐

    安卓系统下的bash shell,ssh服务器,gcc编译器以及vim文本编辑器等

    命令补全机制: 命令本身字符串的补全 参数的补全 使用TAB键可以完成命令补全: 如果给出的字符串不能作为唯一标识,则bash不予补全;再次敲击TAB键,bash会给出参考列表;如果参考列表中的内容过多,bash会...

    UbuntuChina12

    4.4 文件的安全保护机制 101 4.4.1 显示文件的访问权限 102 4.4.2 修改文件的访问权限 103 4.4.3 设置文件的访问权限 104 4.4.4 其他访问权限设置 106 第5章 文件和目录操作 107 5.1 创建文件 108 5.2 显示文件列表 ...

    存储过程的安全及性能优化

    存储过程执行机制 语法阶段:指创建存储过程时,系统检查其创建语句语法正确性的过程。若语法检查通过则系统将该存储过程存储在当前数据库的sys.sql_modules目录视图当中 解析阶段:指某个存储过程首次执行时,...

    Ubuntu权威指南(2/2)

    4.4 文件的安全保护机制 101 4.4.1 显示文件的访问权限 102 4.4.2 修改文件的访问权限 103 4.4.3 设置文件的访问权限 104 4.4.4 其他访问权限设置 106 第5章 文件和目录操作 107 5.1 创建文件 108 5.2 显示文件列表 ...

    Ubuntu权威指南(1/2)

    4.4 文件的安全保护机制 101 4.4.1 显示文件的访问权限 102 4.4.2 修改文件的访问权限 103 4.4.3 设置文件的访问权限 104 4.4.4 其他访问权限设置 106 第5章 文件和目录操作 107 5.1 创建文件 108 5.2 显示文件列表 ...

    Tcl_TK编程权威指南pdf

    第10章 引用问题与eval 使用list命令来构建代码 在eval内部利用concat uplevel命令 subst命令 第11章 正则表达式 何时使用正则表达式 正则表达式的语法 高级正则表达式(are) 语法总结 regexp命令 rgsub...

    apache-commons源码及jar文件

    Commons-Discovery 提供工具来定位资源 (包括类) ,通过使用各种模式来映射服务/引用名称和资源名称。. EL Commons-EL 提供在JSP2.0规范中定义的EL表达式的解释器. FileUpload FileUpload 使得在你可以在应用和...

    GNU make中文手册

    4.5.3 目录搜索的机制 4.5.4 命令行和搜索目录 4.5.5 隐含规则和搜索目录 4.5.6 库文件和搜索目录 4.6 Makefile伪目标 4.7 强制目标(没有命令或依赖的规则) 4.8 空目标文件 4.9 Makefile的特殊目标 4.10 多目标 ...

    GNU MAKE 中文手册

    4.5.3 目录搜索的机制 4.5.4 命令行和搜索目录 4.5.5 隐含规则和搜索目录 4.5.6 库文件和搜索目录 4.6 Makefile伪目标 4.7 强制目标(没有命令或依赖的规则) 4.8 空目标文件 4.9 Makefile的特殊目标 4.10 ...

    GNU make 中文手册 网页版

    4.5.3 目录搜索的机制 4.5.4 命令行和搜索目录 4.5.5 隐含规则和搜索目录 4.5.6 库文件和搜索目录 4.6 Makefile伪目标 4.7 强制目标(没有命令或依赖的规则) 4.8 空目标文件 4.9 Makefile的特殊目标 4.10 ...

    Hbase+Spring boot实战分布式文件存储

    13-3 Hos服务用户及权限管理接口开发 13-4 Hos服务文件管理接口开发 13-5 Hos服务API接口测试 第14章 子模块-SDK模块 开发并测试Hos服务的SDK模块,SDK模块为基于HTTP接口的Hos服务访问模块,支持其他模块引用并对...

    突破程序员基本功的16课.part2

    4.3 垃圾回收机制 4.3.1 垃圾回收的基本算法 4.3.2 堆内存的分代回收 4.3.3 与垃圾回收的附加选项 4.3.4 常见垃圾回收器 4.4 内存管理的小技巧 4.4.1 尽量使用直接量 4.4.2 使用StringBuilder和StringBuffer...

    Gun make中文手冊

    4.5.3 目录搜索的机制 4.5.4 命令行和搜索目录 4.5.5 隐含规则和搜索目录 4.5.6 库文件和搜索目录 4.6 Makefile伪目标 4.7 强制目标(没有命令或依赖的规则) 4.8 空目标文件 4.9 Makefile的特殊目标 4.10 ...

    内存管理内存管理内存管理

    文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。 为什么必须管理内存 内存管理是计算机编程最为基本的...

    操作系统(内存管理)

    文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。 为什么必须管理内存 内存管理是计算机编程最为基本的...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    【推荐】GNU make中文手册

    Makefile的规则 4.1 一个例子 4.2 规则语法 4.3 依赖的类型 ...机制 4.5.4 命令行和搜索目录 4.5.5 隐含规则和搜索目录 4.5.6 库文件和搜索目录 4.6 Makefile伪目标 4.7 强制目标(没有命令...

    RED HAT LINUX 6大全

    本书全面系统地介绍了Red Hat Linux 6。全书共分为五个部分,包括35章和四个附录。第一部分为Red Hat Linux的介绍和安装;第二部分为服务配置;第三部分为系统管理;第四部分为Linux编程;第五部分为附录。...

Global site tag (gtag.js) - Google Analytics