详解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 脚本中 “$” 符号的多种用法 的相关文章

  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 在本地主机上使用相同的 IP 和端口创建套接字

    我在 Linux 上看到奇怪的行为 我看到远程端和本地端都显示相同的 IP 和端口组合 以下是 netstat 输出 netstat anp 网络统计grep 6102 tcp 0 0 139 185 44 123 61020 0 0 0
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • 在 scapy 中通过物理环回发送数据包

    我最近发现了 Scapy 它看起来很棒 我正在尝试查看 NIC 上物理环回模块 存根上的简单流量 但是 Scapy sniff 没有给出任何结果 我正在做的发送数据包是 payload data 10 snf sniff filter ic
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • Python 脚本:每次打印新行到 shell,而不是更新现有行

    说到Python 我是个菜鸟 我有一个 python 脚本 它给我这样的输出 last ZVZX W3vo9I Downloading video webpage last ZVZX W3vo9I Extracting video info
  • 如何在线程创建和退出时调用函数?

    include
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 在 bash 中添加(收集)退出代码

    我需要依赖于脚本中的几个单独的执行 并且不想将它们全部捆绑在一个丑陋的 if 语句中 我想使用退出代码 每次执行并添加它 最后 如果这个值超过阈值 我想执行一个命令 伪代码 ALLOWEDERROR 5 run something RESU
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • 如何制作 Bash 脚本来查找项目中未使用的图像?

    如何制作一个 Bash shell 脚本 它可以识别所有 jpg gif 和 png 文件 然后识别文件夹中任何文本文件中哪些文件未通过 url href 或 src 链接 这就是我开始的 但我最终得到了与我想要的相反的结果 我不想知道引用
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu

随机推荐

  • 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最后运行的后台