linux中shell变量$#,$@,$0,$1,$2的含义解释/Shell中的${}、##和%%使用范例/export

2023-11-16

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参数…。 

-----------------------------------------------------------------

介绍下Shell中的${}、##和%%使用范例,本文给出了不同情况下得到的结果。
假设定义了一个变量为:
代码如下:
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

//------------------------------------------------------------------------------------------------------

1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;

2、一个shell中的系统环境变量怎样才会被复制到子shell中(用export定义的变量);

3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中)。

4、不用export定义的变量只对该shell有效,对子shell是无效的。

---------------------------------------

-d :判断制定的是否为目录
-z:判断制定的变量是否存在值
-f:判断制定的是否为文件
-L:判断制定的是否为符号链接
-r:判断制定的是否可读
-s:判断存在的对象长度是否为0
-w:判断制定的是否可写
-x:判断存在的对象是否可以执行
!:测试条件的否定符号
这些文件操作很多时候给脚本编程带来方便,尤其是用在if条件语句中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux中shell变量$#,$@,$0,$1,$2的含义解释/Shell中的${}、##和%%使用范例/export 的相关文章

  • 有没有办法让我简化这些回声? [复制]

    这个问题在这里已经有答案了 我仍在学习如何编写 shell 脚本 并且我面临着一个挑战 让我更容易回显 Name1 Name2 Name15 我不太确定从哪里开始 我已经想法 但如果我搞砸了 我不想看起来很傻 有什么帮助吗 我实际上还没有尝
  • OSX bash 最小化窗口

    在 Mac 中并使用 bash shell 我想执行一个包含单个命令 启动 Jupyter Lab 的文件并立即最小化终端窗口 有没有办法在不安装第三方软件的情况下做到这一点 是的 只需使用osascript https ss64 com
  • 使用正则表达式模式查找 -name 并使用 cp 替换文件名

    目前我正在使用该命令cron复制 data从源到目标路径 find source path name data exec cp target path 源码结构为 source path category1 001 data source
  • 如何从我自己的脚本向 Fish shell 提供制表符补全?

    我运行的是 Ubuntu 13 10 和 Fish 2 1 0 我想自己编写一个 Python 脚本来从命令行执行一些任务 该脚本将需要命令行参数 我怎样才能编写我的脚本 以便 Fish 可以请求并获取给定参数的可能值 潜在值列表是动态的
  • 是否可以创建一个脚本来保存和恢复权限?

    我正在使用 Linux 系统 需要对一组嵌套文件和目录进行一些权限实验 我想知道是否没有某种方法可以保存文件和目录的权限 而不保存文件本身 换句话说 我想保存权限 编辑一些文件 调整一些权限 然后将权限恢复到目录结构中 将更改的文件保留在适
  • sh / Bash shell 脚本中 !# (bang-pound) 的含义是什么?

    我想了解这个 Scala 脚本是如何工作的 usr bin env bash exec scala 0 object HelloWorld def main args Array String println Hello world arg
  • java Runtime.getRunTime().exec 和通配符?

    我正在尝试使用删除垃圾文件 Process p Runtime getRuntime exec 只要我不使用通配符 它 就可以正常工作 即 Process p Runtime getRuntime exec bin rm f specifi
  • 如何在 C# 中启动文件

    编辑 我觉得自己像个白痴 我有一种感觉 像下面的答案会起作用 但没有看到任何与下面的答案类似的谷歌结果 所以当我看到这段复杂的代码时 我想它一定是这样的 我搜索并找到了这个Windows 列出并启动与扩展关联的应用程序 https stac
  • 检查 Bash 数组中是否存在元素[重复]

    这个问题在这里已经有答案了 我想知道是否有一种有效的方法来检查 Bash 数组中是否存在元素 我正在寻找类似于我可以在Python中做的事情 例如 arr a b c d if d in arr do your thing else do
  • 无需 root 访问权限即可安装 zsh? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有可能 以及如何 我确实需要在几台具有 ssh 访问权限 但没有 root 访问权限 的远程计算机上使用此功能 下载 zsh wget O zsh t
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • 在 C# 中编写批处理脚本的好方法是什么?

    我想用 C 编写简单的脚本 我通常会使用 bat 或 4NT btm 文件 复制文件 解析文本 询问用户输入等等 相当简单 但在批处理文件中正确执行这些操作确实很困难 例如没有例外 我熟悉像 AxScript 这样的命令行 脚本 包装器 这
  • #*/ 在 UNIX Shell 脚本中使用

    谁能详细说明 在 UNIX Shell 脚本中的工作原理 我已经看到它在 Korn Shell 中的使用 它专门用于删除文件的扩展名 例如 func write app log o 删除状态文件 CIE STATUS FILE 这里假设文件
  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可
  • 如何将命令输出作为多个参数传递给另一个命令

    我想将命令的每个输出作为多个参数传递给第二个命令 例如 grep pattern input returns file1 file2 file3 我想复制这些输出 例如 cp file1 file1 bac cp file2 file2 b
  • 通过 Node.js 运行 bash 脚本 - 非法选项 -o pipelinefail

    我正在尝试使用 Node js 执行 bash 脚本child process exec 然而它在文件的第二行爆炸 usr bin env bash set eo pipefail TRACE set x echo we are here
  • 是否可以从应用程序执行 ADB shell 命令?

    我有一个安卓电脑 http www timingpower com rk3288 with root 开箱即用 连接到始终以横向显示的外部显示器 HDMI 和 USB 即使我的应用程序在清单中的活动声明中指定纵向 android scree
  • AJAX 进度条 - 轮询、Comet?

    我想要一些关于如何实施以下内容的建议 我想让我的用户通过 AJAX 了解在我的服务器上运行的任务的进度 我的服务器运行一个 PHP 脚本 该脚本使用 popen 函数通过 shell 命令下载文件 它定期回显 打印正在发生的事情 我想使用
  • HBase Shell 日志记录

    使用 HBase shell 时 我收到大量日志记录 包括 INFO 和 DEBUG 消息 虽然这对于学习 HBase 内部结构来说很有趣 但它非常冗长并且可能会掩盖输出 我尝试过以多种不同的方式更改日志记录级别 包括所描述的here ht
  • Bash 目录上的 For 循环

    快速背景 ls src file1 file2 dir1 dir2 dir3 Script bin bash for i in src do if d i then echo i fi done Output src dir1 src di

随机推荐

  • tomcat8下启动 jsp报错

    The method getDispatcherType is undefined for the type HttpServletRequest java lang ClassNotFoundException org apache js
  • PLSQL中的FOR循环

    游标的FOR循环 循环体是查询的表 游标的for循环 PL SQL 语言提供了 游标 FOR 循环语句 自动执行游标的 OPEN FETCH CLOSE 语句和 循环 语句的功能 当进入循环时 游标 FOR 循环语句 自动 打开游标 并提取
  • LCD调试流程

    本来想学的更深入一些再来写这些总结 但想想 边学边写 记录成长过程也挺好的 下面自底向上 了解LCD的整个工作流程 一 LCD的组成结构和各结构的功能 1 背光板模组 提供光的来源 2 上下偏光板 TFT Glass Substrate 液
  • 【C/C++学习笔记】c++ 回调函数

    1 介绍 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针 地址 作为参数传递给另一个函数 当这个指针被用来调用其所指向的函数时 我们就说这是回调函数 回调函数不是由该函数的实现方直接调用 而是在特定的事件或条件发生时由另外的一方
  • Maven自动化构建工具详解

    一 Maven概述 1 使用Maven原因 我们先通过企业开发中的实际需求来看一看哪些方面是我们现有技术的不足 1 第三方Jar包添加 在今天的JavaEE开发领域 有大量的第三方框架和工具可以供我们使用 要使用这些jar包最简单的方法就是
  • win7+ubuntu20.04双系统安装,以及pointnet2_pytorch编译记录

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 win7 ubuntu20 04双系统安装 二 Ubuntu安装相关 1 Anaconda 2 Nvidia Driver 3 编译pointnet2 p
  • SSM框架-SpringMVC详解

    springmvc概述 Springmvc是spring框架的一个模块 spring和springmvc无需中间整合层整合 Springmvc是一个基于mvc的web框架 表现层的三大任务 URL到controller的映射 http请求参
  • 【MySQL】20个经典面试题,全部答对月薪10k+

    欢迎加入QQ群讨论更多内容 群号 835870546 原文链接 http bbs 51cto com thread 1470880 1 html Part2 经典题目 1 MySQL的复制原理以及流程 基本原理流程 3个线程以及之间的关联
  • IntelliJ Idea 常用快捷键列表

    IntelliJ Idea 常用快捷键列表 Alt 回车 导入包 自动修正 Ctrl N 查找类 Ctrl Shift N 查找文件 Ctrl Alt L 格式化代码 Ctrl Alt O 优化导入的类和包 Alt Insert 生成代码
  • c++/c混合编程

    一 前言 代码从编写到能执行之前 需要经过编译 链接阶段 通常 编译每一个单元文件会生成目标文件 然后链接器会把各个目标文件链接起来生成可执行性文件 链接器之所以能把目标文件相互之间链接起来 就是通过查找目标文件中的唯一函数符号 即经过编译
  • 飞行管理计算机哪个公司,波音737-700的FMC(飞行管理计算机的讲解) VLN081

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 DEP ARR 进离场页面 第一行是你的起始机场 左1 右1 XXXX ARR gt 右2 HOLD 等待点设置叶面 等待点必须在航路上设置的一个点 并已经如入到LEGS 左1 XX 点的名称
  • 初识设计模式:单例模式

    设计模式 是一种思想 解决一个问题的方法有很多种 编程实现一个解决方法也有很多种 设计模式是一种针对不同问题 设计适合该问题的代码 在保证解决问题的基础上 还要保证能有好的扩展性 再有新需求的时候可以便捷的添加新模块 而非大动干戈的改变整个
  • cocos2d Sprite混合达到水流动效果

    使用Sprite混合setBlendFunc方式达到流动效果 void MainHomeLayer updateWaterFall float dt static float offset 0 if NULL waterFall water
  • Qt获取CPU编号和硬盘序列号

    windows下执行命令除了用cmd之外 还有个东西叫WMIC 非常强大 可以通过他获取很多信息 包括硬件信息 QString frmMain getWMIC const QString cmd 获取cpu名称 wmic cpu get N
  • Pandas中DataFrame数据合并、连接(concat、merge、join)

    最近在工作中 遇到了数据合并 连接的问题 故整理如下 供需要者参考 一 concat 沿着一条轴 将多个对象堆叠到一起 concat方法相当于数据库中的全连接 union all 它不仅可以指定连接的方式 outer join或inner
  • sql注入万能密码总结

    select from admin where username and password 第一种 当你已知管理员账号名为admin时可以直接尝试 admin select from admin where username admin a
  • QT/PyQT/PySide 通过富文本形式实现关键词高亮

    因为本质上都是QT 所以我标题带了QT 这个思路是没问题的 就是用C 得换个语言 最开始想根据之前一篇博客的思路进行高亮 PyQT PySide 文本浏览器跳转到指定行 并高亮指定行 qt 指定行高亮 Toblerone Wind的博客 C
  • 归一化互相关匹配

    设待匹配图像I的像素大小为MxN 模板T的像素大小为mxn 从图像I中任意选取一块像素大小为mxn的子图Ix y 其左上角在图像I中的坐标为 x y 可知坐标范围为 其中 M N分别为待匹配图像像素的行数和列数 m n分别为模板像素的行数和
  • [USF-XSim-62] ‘elaborate‘ step failed with errors.[Vivado 12-4473] Detected error while running sim

    USF XSim 62 elaborate step failed with error s Please check the Tcl console output and Vivado 12 4473 Detected error whi
  • linux中shell变量$#,$@,$0,$1,$2的含义解释/Shell中的${}、##和%%使用范例/export

    linux中shell变量 0 1 2的含义解释 变量说明 Shell本身的PID ProcessID Shell最后运行的后台Process的PID 最后运行的命令的结束代码 返回值 使用Set命令设定的Flag一览 所有参数列表 如 用