shell-特殊位置变量

news/2025/1/22 3:20:24/

目录

1.特殊位置变量 $n

2.特殊位置变量 $0

3.特殊位置变量$ #

4.特殊位置变量$*/$@

4.1 $*

4.2 $@

5.shift 命令


1.特殊位置变量 $n

$n:表示传递给脚本或函数的第 n 个参数。

  • $1:第一个参数
  • $2:第二个参数
  • ...
  • $9:第九个参数
  • 超过 9 个参数时,需要用 {},例如 ${10} 表示第十个参数。

2.特殊位置变量 $0

 $0:表示脚本的文件名或当前命令的名称或者脚本路径

bash">#!/bin/bash
echo "脚本名是:$0"
#bash myscript.sh
#脚本名是:myscript.sh

$0获取脚本路径

bash">#!/bin/bash# 使用 dirname 提取脚本目录
script_dir=$(dirname "$0")# 输出脚本目录
echo "脚本目录是:$script_dir"

dirname $0 的作用:

  • 提取 $0 表示的脚本路径中的目录部分。
  • 当使用相对路径调用脚本时,dirname $0 的结果也是相对路径
  • 相对路径:如果你通过相对路径调用脚本,比如 ./script.sh,那么 dirname "$0" 会返回 .,表示当前目录。
  • 绝对路径:如果通过绝对路径调用脚本,dirname "$0" 会返回脚本所在的绝对目录。

basename $0作用:

  • 提取路径中的文件名部分。
  • $0 的值中移除路径部分,只返回文件名。
bash">#!/bin/bash# 获取脚本的完整路径
#script_path=$(readlink -f "$0")# 提取目录和名称
script_dir=$(dirname "$0")
script_name=$(basename "$0")echo "脚本目录是:$script_dir"
echo "脚本名称是:$script_name"

3.特殊位置变量$ #

$# 表示传递给脚本的参数数量,即位置参数的个数。

bash">#!/bin/bash
echo "传递给脚本的参数个数是:$#"
#bash script.sh 1 2 3
#传递给脚本的参数个数是:3
#bash script.sh "1 2" 3
#传递给脚本的参数个数是:2
#bash script.sh {a..z}
#传递给脚本的参数个数是:26

4.特殊位置变量$*/$@

  • $*:将所有参数视为一个单一的字符串。
  • $@:将每个参数视为独立的字符串,特别是当参数包含空格时,区别更加明显。

4.1 $*

  • $* 将所有传递给脚本的参数视为一个单一的字符串,并且各个参数之间会用空格分隔。
  • 没有双引号时,$* 会将所有参数当作一个单一的字符串处理,但它会按照空格拆分参数
bash">#!/bin/bash
echo "使用 \$* 时:"
for i in $*; doecho "[$i]"
donebash test.sh "Hello world" arg2 "this is" arg4$* 会将所有参数当作一个单一的字符串处理,但它会按照空格拆分参数。因此,"Hello world" 被拆成了 Hello 和 world,"this is" 被拆成了 this 和 is。
使用 $* 时:
[Hello]
[world]
[arg2]
[this]
[is]
[arg4]
  • 加上双引号时,"$*" 会把所有的参数当成一个整体,但依然会将参数之间用一个空格隔开。
bash">#!/bin/bash
echo "使用 \"\$*\" 时:"
for i in "$*"; doecho "[$i]"
done使用 "$*" 时:
[Hello world arg2 this is arg4]当加上双引号时,"$*" 将所有参数当作一个完整的单一字符串来处理,并用空格分隔。这样,整个输入变成了一个大字符串 Hello world arg2 this is arg4。

4.2 $@

$@ 也表示所有传递给脚本的参数,但它会将每个参数作为一个独立的字符串,尤其是当参数包含空格时,会将每个参数保留为单独的字符串。

  • 没有双引号时,$@ 会和 $* 相似地将每个参数当作一个独立的部分,参数之间也会用空格分隔。与$*不加双引号行为相同
bash">#!/bin/bash
echo "使用 \$@ 时:"
for i in $@; doecho "[$i]"
done#输出
使用 $@ 时:[Hello]
[world]
[arg2]
[this]
[is]
[arg4]
  • 加上双引号时,"$@" 会让每个参数保持独立,即使参数中有空格,也不会被拆开。
bash">#!/bin/bash
echo "使用 \"\$@\" 时:"
for i in "$@"; doecho "[$i]"
done使用 "$@" 时:
[Hello world]
[arg2]
[this is]
[arg4]当加上双引号时,"$@" 会保留每个参数作为独立的字符串。即使参数中包含空格(如 "Hello world"),它也会将整个 "Hello world" 作为一个参数处理,不会拆分。每个参数都保持独立性。

5.shift 命令

shift 用来将位置参数向左移动,参数的数量会减少,原来的 $1 会被移除,新的 $2 变成 $1,依此类推。

bash">#!/bin/bash# 打印所有传递的参数
echo "原始参数:$@"# 移动参数
shift# 打印移位后的参数
echo "移位后的参数:$@"

可以使用 shift 多次,以进一步移动参数:

bash">#!/bin/bash
shift 2
echo "移位两次后的参数:$@"bash script.sh arg1 arg2 arg3 arg4


http://www.ppmy.cn/news/1565118.html

相关文章

Nginx在Linux中的最小化安装方式

1. 安装依赖 需要安装的东西: wget​,方便我们下载Nginx的包。如果是在Windows下载,然后使用SFTP上传到服务器中,那么可以不安装这个软件包。gcc g​,Nginx是使用C/C开发的服务器,等一下安装会用到其中的…

2025智能网联汽车数据分类分级白皮书

智能网联汽车作为现代交通技术的重要成果,其核心特征之一是产生了大量的、多样化的数据,这些数据不仅对提升车辆性能和用户体验至关重要,对维护交通安全、推动智能交通系统的发展具有深远影响。在数字经济时代,数据的价值日益凸显…

Python基于Django的图像去雾算法研究和系统实现(附源码,文档说明)

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

【论文投稿】探索JavaScript前端开发:开启交互之门的神奇钥匙(一)

目录 一、引言 二、基础入门 2.1 变量与数据类型 2.2 条件与循环语句 2.3 函数 三、DOM操作 3.1 获取DOM元素 3.2 修改DOM内容和样式 3.3 动态创建和删除DOM元素 一、引言 在当今数字化时代,互联网已然成为人们生活不可或缺的一部分,而网页作为互…

Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)

系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…

数字艺术类专业人才供需数据获取和分析研究

本文章所用数据集:数据集 本文章所用源代码:源代码和训练好的模型 第1章 绪论 1.1研究背景及意义 随着社会经济的迅速发展和科技的飞速进步,数字艺术类专业正逐渐崛起,并呈现出蓬勃发展的势头。数字艺术作为创作、设计和表现形式的…

本地仓库管理之分支间的操作

当工作区的文件可能在某一阶段用于两个项目,之后做不同修改时,就可以在该阶段切出新的分支,分别进行管理。 当前分支 以刚搭建好的git仓库为例,刚搭建完的仓库只有master分支,使用git branch查看当前的分支情况&…

机器人传动力系统介绍

以下是对机器人驱动系统的分析、最新科技应用以及世界顶级公司机器人型号使用的技术: 机器人驱动系统分析 液压驱动:利用液体压力来传递动力,通过液压泵将液压油从油箱抽出,送至液压缸,推动活塞运动,进而…