shell相关知识
在bash shell中,$( )与` ` (反引号)都是用来做命令替换用(command substitution)的。
所谓的命令替换与我们第五章学过的变量替换差不多,都是用来重组命令行:
*完成引号里的命令行,然后将其结果替换出来,再重组命令行。
例如:
$ echo the last sunday is $(date -d "last sunday" +%Y-%m-%d)
在操作上,用$( )或` `都无所谓,只是我"个人"比较喜欢用$( ),理由是:
1, ` `很容易与' ' (单引号)搞混乱,尤其对初学者来说。
有时在一些奇怪的字形显示中,两种符号是一模一样的(直竖两点)。
当然了,有经验的朋友还是一眼就能分辩两者。只是,若能更好的避免混乱,又何乐不为呢?
2,在多层次的复合替换中,` `须要额外的跳脱( /` )处理,而$( )则比较直观。例如:
这是错的:
command1 `command2 `command3` `
原本的意图是要在command2 `command3`先将command3提换出来给command 2处理,然后再将结果传给command1 `command2 ...`来处理。
然而,真正的结果在命令行中却是分成了`command2 `与``两段。
正确的输入应该如下:
command1 `command2 /`command3/` `
要不然,换成$( )就没问题了:
command1 $(command2 $(command3))
只要你喜欢,做多少层的替换都没问题啦~~~ ^_^
不过,$( )并不是没有弊端的...
首先,` `基本上可用在全部的unix shell中使用,若写成shell script,其移植性比较高。
而$( )并不见的每一种shell都能使用,我只能跟你说,若你用bash2的话,肯定没问题...
接下来,再让我们看${ }吧...它其实就是用来作变量替换用的啦。
一般情况下,$var与${var}并没有啥不一样。
但是用${ }会比较精确的界定变量名称的范围,比方说:
$ A=B
$ echo $AB
原本是打算先将$A的结果替换出来,然后再补一个B字母于其后,但在命令行上,真正的结果却是只会替换变量名称为AB的值出来...
若使用${ }就没问题了:
$ echo ${A}B
BB
不过,假如你只看到${ }只能用来界定变量名称的话,那你就实在太小看bash了﹗
有兴趣的话,你可先参考一下cu本版的精华文章:
http://www.chinaunix.net/forum/viewtopic.php?t=201843
参考以前的:http://www.cnblogs.com/youxin/p/3544179.html
为了完整起见,我这里再用一些例子加以说明${ }的一些特异功能:
假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt
我们可以用${ }分别替换获得不同的值:
${file#*/}:拿掉第一条/及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最后一条/及其左边的字符串:my.file.txt
${file#*.}:拿掉第一个. 及其左边的字符串:file.txt
${file##*.}:拿掉最后一个. 及其左边的字符串:txt
${file%/*}:拿掉最后条/及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:拿掉第一条/及其右边的字符串:(空值)
${file%.*}:拿掉最后一个. 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一个. 及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
#是去掉左边(在鉴盘上#在$之左边)
%是去掉右边(在鉴盘上%在$之右边)
单一符号是最小匹配﹔两个符号是最大匹配。
获取子串:
${file:0:5}:提取最左边的5个字节:/dir1
${file:5:5}:提取第5个字节右边的连续5个字节:/dir2
我们也可以对变量值里的字符串作替换:
${file/dir/path}:将第一个dir替换为path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部dir替换为path:/path1/path2/path3/my.file.txt
获取文件名:
basename
basename - strip directory and suffix from filenames
SYNOPSIS
basename NAME [SUFFIX]
basename OPTION... NAME.
basename /usr/bin/sort ---> "sort"
去除后缀:
root@iZ23onhpqvwZ:~# basename ms.tgz .tgz
ms
https://www.jianshu.com/p/483fdf22e909
https://blog.csdn.net/MirrorLean/article/details/74162664
shell相关知识的更多相关文章
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- shell从入门到精通进阶之一:Shell基础知识
1.1 简介 Shell是一个C语言编写的脚本语言,它是用户与Linux的桥梁,用户输入命令交给Shell处理,Shell将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户. 下面是处 ...
- [转帖]xserver相关知识汇总
xserver相关知识汇总 https://blog.csdn.net/QTVLC/article/details/81739984 本文主要是从以下几个方面介绍xorg-xserver 相关的知 ...
- linux 创建守护进程的相关知识
linux 创建守护进程的相关知识 http://www.114390.com/article/46410.htm linux 创建守护进程的相关知识,这篇文章主要介绍了linux 创建守护进程的相关 ...
- PySpark SQL 相关知识介绍
title: PySpark SQL 相关知识介绍 summary: 关键词:大数据 Hadoop Hive Pig Kafka Spark PySpark SQL 集群管理器 PostgreSQL ...
- Linux Shell 基础知识(一)
1. 本文知识结构 2. shell 基础知识 2.1 shell 简单介绍 GNU bash shell 能提供对 Linux 系统的交互式访问,一般来说,使用快捷键 Ctrl + Alt + ...
- 移动WEB像素相关知识
了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...
- listener监听器的相关知识
从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...
- UIViewController相关知识
title: UIViewController 相关知识date: 2015-12-13 11:50categories: IOS tags: UIViewController 小小程序猿我的博客:h ...
随机推荐
- vim搜索设置高亮
vim搜索设置高亮 linux vim打开文档搜索字符串时,设置被搜索到字符串高亮显示. 有两种方法: 1.暂时设置:vim打开文档-->命令行形式输入set hlsearch. 缺点:关闭文档 ...
- Solr 多字段、打分规则、权重和实时索引同步
1.字段 Filed:<field name="_id" type="text_ik" indexed="true" stored=& ...
- Spark1.5堆内存分配
这是spark1.5及以前堆内存分配图 下边对上图进行更近一步的标注,红线开始到结尾就是这部分的开始到结尾 spark 默认分配512MB JVM堆内存.出于安全考虑和避免内存溢出,Spark只允许我 ...
- pl/sql 实例解析 01
1. 合并 firstname, lastname. 1: declare 2: v_first_name varchar2(255); 3: v_last_name varchar2(255); 4 ...
- C语言 函数指针三(反向调用)
动态库代码 //简单的动态库开发----报文发送 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib. ...
- redis 连接池
redis是一个key-value存储系统,和memcached类似,支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set-有 ...
- 【vijos】1447 开关灯泡(高精度+特殊的技巧)
https://vijos.org/p/1447 一开始想了想似乎只想到了与约数个数有关,即约数个数为奇数那么显然是亮的. 竟然没想到完全平方数..sad.. 在正因子中,只有完全平方数的正因子才是奇 ...
- javaScript 的小技巧
20160314知识点的补充:a-1:最原始的操作要比函数调用快 <script type="text/javascript"> var min = Math.min( ...
- wpf datagrid 中按钮 动态显示
/若datagrid出现滚动条可能会出现问题需要加上下面俩句话.//因为出滚动条时,为了显示加速,datagrid会加载一部分数据.另一些数据当滚动时在加载进去 这样初始化获取不到这些数据.//在da ...
- 2、手把手教React Native实战之从React到RN
###React简介 RN是基于React设计,了解React有助于我们开发RN应用: React希望将功能分解化,让开发变得像搭积木一样,快速而且可维护 React主要有如下3个特点: *作为UI( ...