一直傻傻搞不清,还是梳理一下吧。

linux中shell变量$#,$@,$0,$1,$2的含义解释:

变量说明:

$$

Shell本身的PID(ProcessID)

$!

Shell最后运行的后台Process的PID

$?

最后运行的命令的结束代码(返回值)

$-

使用Set命令设定的Flag一览

$*

所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。

$@

所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。

$#

添加到Shell的参数个数

$0

Shell本身的文件名

$1~$n

添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

如果直接在命令行echo $0,则打印的是当前运行的shell名,(如ksh,bash,csh);如果在脚本中,$0表示脚本名称或函数名称;

那么

${0%/*}和${0##/*}代表什么?

${0%/*}

以例子来表述:

新建一个目录——mkdir -p /usr/school/grade/class/

新建一个文件——touch /usr/school/grade/class/student

在student文件里写上代码并保存——

echo $0

echo ${0#*/}

echo ${0##*/}

运行代码—— sh /usr/school/grade/class/student

我们会得到三个结果分别是

/usr/school/grade/class/student

usr/school/grade/class/student

student

这个时候再来讲解那三条指令

$0,$1,$2 前面有一个$美元符号的,都象征着变量,而$0象征本身shell脚本文件的名字,也就是 /usr/school/grade/class/student

最右边的 / ,象征着你要寻找,你要匹配的东西,在哪里找呢?在文件名字 /usr/school/grade/class/student 里面找

#象征要寻找最左边的/

##象征要寻找最右边的/

而*是通配符,象征着任意长度的字符串

所以在##条件下的 */ , 就象征着/usr/school/grade/class/这一段

找到了这一段之后,就把它截取,扔掉,剩下的就是student这个文件名字

所以 ${0##*/} 的作用是寻找一个路径下的具体文件名字

/usr/school/grade/class/student,就得到 student

${0%/*}##

#是从左边头部开始寻找起,%是从尾部开始寻找起(If the pattern matches a trailing portion)

${0%/*} 这个命令,对于/usr/school/grade/class/student,从右边找起,得到是 /student 这个部分,然后扔掉

如果是${0%%/*},找到的就是 /usr/school/grade/class/student

综上所述

对于同一个文件 /usr/school/grade/class/student

${0%/*}得到前面/usr/school/grade/class

${0##*/}得到的是后面 student

最新文章

  1. 关于java.util.LinkedHashMap cannot be cast to ......的解决办法
  2. sparkSQL1.1入门之二:sparkSQL执行架构
  3. 新品【国内动态】服务器列表
  4. 北斗导航 | 卫星导航在动态监测中的应用(RTK)
  5. php函数删除非空目录,删除文件夹(非空目录)及其中所有文件的思路及源代码
  6. 不存在从node到node*的适当转换函数_C++构造函数和初始化表
  7. tomcat使用manager GUI应用和script分别reload应用的注意事项
  8. php编写大型网站问题集
  9. 特斯拉中国工厂2020投产,还可能为完全自动驾驶更新硬件
  10. python urllib3 使用_使用Python URLLIB3下载文件
  11. 40_ZYNQ7020开发板RS485协议通信
  12. handbrake下载太慢_handbrake使用教程
  13. 常州市行政地图矢量高清pdf区划彩色大图cdr或ai2020年
  14. Java中Number类详解
  15. UI设计培训之用户画像-带你认清的你的用户
  16. 资产监测设备中法国配置工具介绍(二)
  17. 为什么手机玩我的世界进服务器会显示红字,LOL进去时显示的蓝红标志是什么 | 手游网游页游攻略大全...
  18. 如何更新neovim以及安装指定版本
  19. java课程设计纸牌游戏_java练习项目之纸牌游戏实例源码
  20. buildroot的使用简介

热门文章

  1. php需要什么技能,成为一个好的PHP工程师需要掌握什么技能
  2. 连接端口 配置hive_Zeppelin带有Kerberos认证的Hive解释器的配置
  3. docker mysql 日志_docker中将MySQL运行在容器中失败提示“ InnoDB : Error 22 with aio_write”的解决办法...
  4. docker mysql编辑器_docker官方mysql镜像自定义配置详解
  5. oracle激活锁定用户,oracle 锁用户,oracle解除用户锁定
  6. QM法化简C语言程序,QM基础教程
  7. 一、史上最强hadoop分布式集群的搭建
  8. 十九、抓包利器Charles的使用
  9. 十一、深入JavaScript的定时器(七)
  10. 中科院自动化所:最新视觉-语言预训练综述