详解Shell 脚本中 “$” 符号的多种用法

2023-11-08

通常情况下,在工作中用的最多的有如下几项:

1、$#:表示执行脚本传入参数的个数

2、$*:表示执行脚本传入参数的列表(不包括$0)

3、$$:表示进程的id;Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)

4、$!:Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)

5、$@:表示获取执行脚本传入的所有参数

6、$0:表示执行的脚本名称

7、$1:表示第一个参数

8、$2:表示第二个参数

9、$?:表示脚本执行的状态,0表示正常,其他表示错误

在Shell脚本中,我们经常会看到$0、$1、$2、$3等,看着像是参数,但又不太像,这些究竟表示啥呢?其实非常简单:

$0:你写的shell脚本本身的名字
$1:给你写的shell脚本传的第一个参数
$2:给你写的shell脚本传的第二个参数

#!/bin/sh
echo "shell脚本本身的名字: $0"
echo "传给shell的第一个参数: $1"
echo "传给shell的第二个参数: $2"

假设该脚本名字叫test.sh,那么我们执行bash test.sh a 1,就可以看到结果:
shell脚本本身的名字: test.sh

传给shell的第一个参数: a

传给shell的第二个参数: 1

Linux脚本中$#、$0、 1 、 1、 1@、 ∗ 、 *、 、 、 分别表示什么?

$#:传入脚本的参数个数;
 
$0:  脚本自身的名称;  
 
$1:  传入脚本的第一个参数;
 
$2:  传入脚本的第二个参数;
 
$@: 传入脚本的所有参数;
 
$*:传入脚本的所有参数;
 
$$:  脚本执行的进程id;
 
$?:  上一条命令执行后的状态,结果为0表示执行正常,结果为1表示执行异常;
 
其中$@与$*正常情况下一样,当在脚本中将$*加上双引号作为“$*”引用时,此时将输入的所有参数当做一个整体字符串对待。比如输入参数有a b c三个参数,则“$*”表示“a b c”一个字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

详解Shell 脚本中 “$” 符号的多种用法 的相关文章

  • 有没有办法让 Linux CLI IO 重定向持久化?

    我有多个管道命令 如下所示 find options grep options xargs grep options 它们中的每一个都可能产生我不感兴趣的错误 权限错误 文件名空格错误等 因此 我想将所有错误重定向到 dev null 我知
  • 选择多个模式的 awk 代码

    这是我的输入文件 比如modified txt r4544 n479826 2012 08 28 07 12 33 0400 Tue 28 Aug 2012 1 line Changed paths M branches 8 6 0 con
  • 如何从正则表达式中获取所有匹配项?

    我想获得所有出现的情况 0 9A Z 以供稍后处理 我有 if cat file 0 9A Z then echo BASH REMATCH fi 这给了我第一个匹配项 但是我如何处理文件中的所有匹配项 谢谢 如果您只想获取正则表达式的匹配
  • Docker 容器可以访问 DNS,但无法解析主机

    我在运行 docker 容器时遇到一个有趣的问题 突然间 我无法从容器内解析 DNS 这是一个概要 一切都没有解决 apt get pip 一次性 ping 容器等正在运行docker run it dns 8 8 8 8 ubuntu p
  • 在 shell 脚本中将脚本目录更改为用户的 homedir

    在我的 bash 脚本中 我需要将当前目录更改为用户的主目录 如果我想更改为用户的foo主目录 从命令行我可以执行以下操作 cd foo 效果很好 但是当我从script它告诉我 bar sh line 4 cd foo No such f
  • 检查 Linux 中给定进程的打开 FD 限制

    我最近有一个 Linux 进程 泄露 了文件描述符 它打开了文件描述符 但没有正确关闭其中一些文件描述符 如果我对此进行监控 我就可以提前得知该过程已达到其极限 有没有一种很好的 Bash 或 Python 方法来检查 Ubuntu Lin
  • 如何使用 shell 脚本解压所有 .tar.gz?

    我试过这个 DIR path tar gz if ls A DIR 2 gt dev null then echo not gz else tar zxvf path tar gz C path tar fi 如果该文件夹有一个 tar 则
  • 在linux中使用setcap [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 要将 cap net raw 功能添加到 例如 bin ping 我们使用以下命令 setcap cap net raw ep bin ping ep
  • bash 脚本中的未绑定变量

    在调试我的脚本时 我变得绝望 我使用了我的高级同事向我推荐的一些结构 但我不知道如何使其正常工作 bin bash x set ueo pipefail exec gt tmp dq log source BASH SOURCE env p
  • 我如何知道 std::map 插入成功还是失败?

    我在多线程应用程序中有一个映射 将名为 uuid 的类映射到指针 我想知道插入操作是否成功或失败 e g mymap insert hint MyMap value type entry uuid itemptr 如果失败的话会抛出异常或者
  • 并发 I/O - 缓冲区损坏、块设备驱动程序

    我开发块分层设备驱动程序 所以 我拦截WRITE请求并加密数据 并解密数据end bio 例行程序 在处理和READ要求 所以在单流中一切正常 但是 如果尝试同时从两个或更多进程执行 I O 我会遇到缓冲区内容损坏的情况 我没有任何本地存储
  • 从配置文件中读取分配

    我有配置文件 其中每行都包含用分号分隔的分配 像这样的东西 模仿正常的 shell 分配 VAR1 1 VAR2 2 VAR1 3 VAR2 4 每行包含相同的变量 并且旨在单独处理 这些配置文件都在系统管理员的控制之下 所以使用eval现
  • 在Linux中执行jar文件[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我创建了一个可执行的 Java jar 文件 也就是说 我将 java 程序正确打包到 jar 文件中 包括 META INF MANIFEST 文件
  • 打破条件变量死锁

    我遇到这样的情况 线程 1 正在等待条件变量 A 该变量应该由线程 2 唤醒 现在线程 2 正在等待条件变量 B 该变量应该由线程 1 唤醒 在我使用的场景中条件变量 我无法避免这样的死锁情况 我检测到循环 死锁 并终止死锁参与者的线程之一
  • 了解 IServiceProvider 和 QueryService

    谁能解释一下背后的想法IServiceProvider and QueryService 我不明白服务是什么以及它与其他类型的对象或接口有何不同 我看到的解释很少 主要是一些评论here https learn microsoft com
  • Pthread互斥锁由不同线程解锁

    一个天真的问题 我之前读到过 MUTEX 只能由锁定它的线程解锁 但我写了一个程序THREAD1锁定 mutexVar 并进入睡眠状态 然后THREAD2可以直接解锁mutexVar做一些操作并返回 gt 我知道每个人都说我为什么要这样做
  • grep 跨文件的最后 n 个匹配

    我正在使用 grep 提取一组文件中的行 grep 一些字符串 log 是否可以将每个文件的最大匹配数限制为每个文件的最后 n 个匹配项 好吧 我认为 grep 不支持限制从文件末尾开始的 N 个匹配 所以这就是你必须做的 ls log w
  • 如何像C99一样使用make和编译?

    我正在尝试使用 Makefile 编译 Linux 内核模块 obj m main o all make C lib modules shell uname r build M PWD modules clean make C lib mo
  • 如何告诉 CMake 将构建文件放在哪里?

    我想告诉 CMake 将文件和文件夹输出到不同的文件夹而不是当前文件夹 我在下面讨论的是 CMake 生成的文件 文件 CMakeCache txt 目录 CMakeFiles 文件 生成文件 目录 bin 文件 cmake install
  • Docker容器内的动态监听端口

    我有一个应用程序 在使用其默认端口建立一些连接后 开始打开 侦听 新的随机端口来处理现有连接 然后删除它们 视频通话 它还在通信协议内交换其IP地址和端口 我能够解决IP地址问题 但仍然无法找到一种方法来动态告诉主机的IPTABLES在Do

随机推荐

  • MongoDB环境搭建

    文章目录 MongoDB环境搭建 1 下载包 2 安装注意事项 选择custom 设置自定义目录 设置数据库数据存储路径 3 设置服务 MongoDB环境搭建 1 下载包 https www mongodb com download cen
  • android 阿拉伯语下的光标,android – EditText中的双光标,用于输入类型编号/电话(RTL阿拉伯语)...

    我有一个EditText设置为重力右 所以如果语言是阿拉伯语 文本从右边开始 注意 我的应用程序支持RTL 我没有为EditText设置TextDirection 因为它会遇到同样的问题 设置为Right的Gravity可以完美地完成工作
  • 【LeetCode-面试经典150题-day25】

    目录 530 二叉搜索树的最小绝对差 230 二叉搜索树中第K小的元素 98 验证二叉搜索树 530 二叉搜索树的最小绝对差 题意 给你一个二叉搜索树的根节点 root 返回 树中任意两不同节点值之间的最小差值 差值是一个正数 其数值等于两
  • Conceptual Challenges for Interpretable Machine Learning

    Conceptual Challenges for Interpretable Machine Learning David S Watson1 Department of Statistical Science University Co
  • C语言编程笔记丨数据结构-顺序线性表的实现(初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作)

    define MAXSIZE 100 结构体定义 typedef struct int elem 基地址 int length 结构体当前长度 int listsize 结构体最大长度 Sqlist 结构体类型名 各项操作 void Sho
  • Spring Boot通过EasyExcel异步多线程实现大数据量Excel导入,百万数据30秒

    原创 小光xgblack IT小胡同 2023 02 19 12 24 发表于江苏 整体思路 整体思路很简单 就是在文件读取和数据多线程处理这两步发力 Excel数据分片读取 线程池异步处理数据 Mybatis Plus批量存储 实现过程
  • 【目标检测—玩手机检测数据集】

    目标检测 玩手机检测数据集 数据集示例 标签可视化 其他相关资源 1 YOLO玩手机检测数据集二 近一万多张使用lableimg标注软件 标注好的真实场景的高质量图片数据 图片格式为jpg 标签有两种 分别为VOC格式和yolo格式 分别保
  • 第二章:25+ Python 数据操作教程(第一节Python 中的数据结构)

    这篇文章解释了 Python 中使用的数据结构 了解编程语言中的数据结构至关重要 在 Python 中 有许多可用的数据结构 它们如下 1 字符串 2 列出 3 元组 4 词典 5 套 目录 1 字符串 2 列表 3 元组 4 字典 5 套
  • Java-Redis缓存穿透,击穿,雪崩和布隆算法

    Java Redis缓存穿透 击穿 雪崩和布隆算法 1 缓存穿透概念 2 如何解决缓存穿透 3 什么是缓存击穿 4 什么是缓存雪崩 5 导致缓存雪崩的原因 6 缓存穿透 缓存击穿 缓存雪崩的区别 1 缓存穿透概念 当一个用户想要查询数据时
  • LRU算法java实现

    1 lru简介 LRU是Least Recently Used的缩写 即最近最少使用 常用于页面置换算法 是为虚拟页式存储管理服务的 即当一个数据最近一段时间没有被访问 未来被访问的概率也很小 当空间被占满后 最先淘汰最近最少使用的数据 2
  • Android动态来改变App桌面图标

    时不时的我们就会发现 一些我们常见的应用 比如某宝 某东 在一些特殊的日子中 比如双十一 元旦 为了迎合这样一个日子的气氛 在桌面的应用图标就会发生改变 其实对于这样的一个桌面图标更换 Android中为我们提供了AndroidManife
  • spring data jpa 关联查询返回自定义对象

    Override public List
  • Linux性能检测常用的10个基本命令

    1 uptime 该命令可以大致的看出计算机的整体负载情况 load average后的数字分别表示计算机在1min 5min 15min内的平均负载 2 dmesg tail 打印内核环形缓存区中的内容 可以用来查看一些错误 上面的例子中
  • vue3组件库搭建并且发布到npm保姆教程连载一

    前言 小时候的梦想是拥有一个自己的组件库 开玩笑哈 接触前端后 很多时候在npm install的时候 我在想我们安装的这些依赖发布者是如何将依赖发布到npm 并且可以让别人使用的 未知是让人害怕的 经过一系列学习和探索后 我也拥有了自己的
  • 【python数据挖掘课程】二十六.基于SnowNLP的豆瓣评论情感分析

    这是 Python数据挖掘课程 系列文章 前面很多文章都讲解了分类 聚类算法 而这篇文章主要讲解如何调用SnowNLP库实现情感分析 处理的对象是豆瓣 肖申克救赎 的评论文本 文章比较基础 希望对你有所帮助 提供些思路 也是自己教学的内容
  • 全国青少年电子信息智能创新大赛(决赛)python·模拟三卷,含答案解析

    全国青少年电子信息智能创新大赛 决赛 python 模拟三卷 一 程序题 第一题 描述 现有 n 个人依次围成一圈玩游戏 从第 1 个人开始报数 数到第 m 个人出局 然 后从出局的下一个人开始报数 数到第 m 个人又出局 如此反复到只剩下
  • Google分布式三篇论文---BigTable

    Google s BigTable 原理 翻译 题记 google 的成功除了一个个出色的创意外 还因为有 Jeff Dean 这样的软件架构天才 官方的 Google Reader blog 中有对BigTable 的解释 这是Googl
  • TensorRT(2):TensorRT的使用流程

    TensorRT系列传送门 不定期更新 深度框架 TensorRT 文章目录 一 在线加载caffe模型 序列化保存到本地 二 反序列化直接加载保存后的trt模型 以caffe分类模型为例 简单介绍TRT的使用流程 这里不涉及量化 就以fp
  • 测试的艺术:代码检查、走查与评审

    软件开发人员通常不会考虑的一种测试形式 人工测试 大多数人都以为 因为程序是为了供机器执行而编写的 那么也该由机器来对程序进行测试 这种想法是有问题的 人工测试方法在暴露错误方面是很有成效的 实际上 大多数的软件项目都应使用到一下的人工测试
  • 详解Shell 脚本中 “$” 符号的多种用法

    通常情况下 在工作中用的最多的有如下几项 1 表示执行脚本传入参数的个数 2 表示执行脚本传入参数的列表 不包括 0 3 表示进程的id Shell本身的PID ProcessID 即脚本运行的当前 进程ID号 4 Shell最后运行的后台