1.反引号与$()用于命令替换 反引号和$()的作用相同,用于命令替换(command substitution),即完成引用的命令的执行,将其结果替换出来,与变量替换差不多。比如: echo `date '--date=1 hour ago' +%Y-%m-%d-%H` #或者 echo $(date '--date=1 hour ago' +%Y-%m-%d-%H) 输出结果是相同的: 2019-02-02-09。 在编写Shell脚本时建议使用$(),原因主要有: (1)反引号与单引号外形相似,容易混淆; (2)在多层次的复合替换中,里层的反引号需要转义处理(\`) ,而$()则 在Shell脚本编程中,了解如何正确使用不同的引号和变量替换是非常重要的。本文主要讨论的是反引号、$()以及${}的区别和用途。 让我们来看看反引号(`)和$(),它们都是用于命令替换。这意味着你可以将它们包含的命令执行并用其输出替换它们自身。例如,`date '--date=1 hour ago' +%Y-%m-%d-%H` 或 $(date '--date=1 hour ago' +%Y-%m-%d-%H) 都会显示当前时间减去1小时的时间戳。尽管它们功能相同,但在编写脚本时,推荐使用$()。原因有以下几点: 1. 反引号与单引号形状相近,容易造成混淆,而$()的括号结构更清晰。 2. 在多层命令替换中,反引号需要转义,例如`command1 `command2 `command3``,这会导致解析错误。正确的做法是使用$(),如`command1 $(command2 $(command3))`,这样层次结构更易读。 3. 反引号中的反斜杠有特殊处理,转义特殊字符时需要两个反斜杠,而$()只需要一个。例如,要输出文字"$HOME"而不是环境变量HOME的值,使用反引号时需写成`echo \\$HOME`,而$()则只需`echo \$HOME`。 接下来,我们讨论${},它主要用于变量替换。 2.1 直接变量替换:通常,$var 和 ${var} 没有本质区别,但${var}能更精确地界定变量名的边界,避免因相邻字符导致的误解析。例如,如果A="dablelv",`echo $AB`会尝试查找名为AB的变量,而`echo ${A}B`则会输出"A"的值然后跟一个"B"。 2.2 特殊变量替换: - ${:}与${::}:这两个用于字符串提取。${var:n}提取从索引n开始到字符串结束的部分。如果n为负数,提取倒数n个字符。例如,${file: -3} 提取最后三个字符"txt"。 - ${var:n1:n2}:提取从n1开始的n2个字符,如${file:5:5}提取"/dir2"。 - ${/}与${//}:用于模式匹配替换。${var/pattern/replacement}替换第一次出现的pattern,${var//pattern/replacement}替换所有出现的pattern。例如,将所有的"dir"替换为"path"。 - ${#}、${##}、${%}与${%%}:这些用于模式匹配截断。${var#pattern}和${var##pattern}分别移除最左边的和所有匹配的pattern,${var%pattern}和${var%%pattern}则从右边开始。例如,${file#*/}移除第一个"/"之前的内容。 总结来说,理解并熟练掌握反引号、$()以及${}的使用是编写高效且无误的Shell脚本的关键。在实际操作中,尽量使用$()进行命令替换,而使用${}进行变量替换和各种字符串操作,以提高代码的可读性和可靠性。
- 粉丝: 5
- 资源: 1016
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- python图片转字符
- 【java毕业设计】客户关系管理系统源码(ssm+mysql+说明文档).zip
- 【java毕业设计】酒店客房预定管理系统源码(ssm+mysql+说明文档+LW).zip
- 【java毕业设计】教师业务数据统计与分析系统源码(ssm+mysql+说明文档).zip
- cp105b,cp205,cp205w,cp215,cp215w寿命重置工具,解决091-402
- 【java毕业设计】健身房管理系统源码(ssm+mysql+说明文档).zip
- py test for self
- ui-auto test for self
- 【java毕业设计】基于推荐算法的图书购物网站源码(ssm+mysql+说明文档+LW).zip
- appium test for self
评论0