当前位置: 首页 > news >正文

第二十七章 位置参数

第二十七章 位置参数

其它编程语言都能够接受命令行选项和参数,Shell也拥有此项特征。

访问命令行

Shell提供了一组名为位置参数(positional parameters)的变量,其中包含了命令行上的各个单词。这些变量按照0~9分别命名,可以通过下列方式显示:

#!/bin/bash#posit-param: 查看命令行参数的脚本echo "
\$0 = $0
\$1 = $1
\$2 = $2
\$3 = $3
\$4 = $4
\$5 = $5
\$6 = $7
\$8 = $8
\$9 = $9
"

运行结果如下:

在这里插入图片描述


确定参数个数

Shell还提供了变量$#,其中包含了命令行中的参数的个数:

#!/bin/bash# posit-param:查看命令行参数的脚本echo "
Number of arguments: $#
\$0 = $0
\$1 = $1
\$2 = $2
\$3 = $3
\$4 = $4
\$5 = $5
\$6 = $7
\$8 = $8
\$9 = $9
"

运行结果如下:

在这里插入图片描述


shift-访问多个参数

上个例子中输入的参数超过了空间参数的个数,因此有些参数并未显示,Shell提供的Shift命令可以解决此问题。每执行一次shift命令,就将所有的参数"左移一个位置"。通过shif命令,可以自始自终和一个参数打交道(除了$0):

#!/bin/bash#posit-param2: 脚本显示所有参数count=1while [[ $# -gt 0 ]]; doecho "Argument $count = $1"count=$((count + 1))shift
done

运行结果如下:

在这里插入图片描述

Shell的位置参数也可以用于Shell函数。

批量处理位置参数

有时候批量处理所有位置参数更为实用。Shell提供了两个特殊参数*和@,两者均可扩展成完整的位置参数列表,。

特殊参数*和@

参数描述
$*扩展成从1开始的位置参数列表。如果它出现在双引号内部,则扩展成由双引号引用的字符串,其中包含了所有的位置参数,彼此之间以Shell变量IFS的第一个字符分割符(默认是空格符)
$@扩展成从1开始的位置参数列表。如果它出现在双引号内部,则将每个位置参数扩展成独立的单词

例如:

#!/bin/bash#posit-params3:演示$*和$@的脚本print_params () {echo "\$1 = $1"echo "\$2 = $2"ehco "\$3 = $3"echo "\$4 = $4"
}pass_params () {echo -e "\n" '$* :'; print_params $*echo -e "\n" '"$*" :'; print_params "$*"echo -e "\n" '$@ :'; print_params $@echo -e "\n" '"$@" :'; print_params "$@"
}pass_params "word" "words with spaces"

运行结果如下:

在这里插入图片描述

∗ 和 *和 @生成了4个单词:


word words with spaces



"$*"生成了一个单词:


“word words with spaces”


"$@"生成了2个单词:


“word” “words with spaces”


Shell提供了4种获取位置参数列表的不同方法中,到目前为止, ”$@"适用大部分情况,因为其保留了每个位置参数的整体性。为了保证安全性,应该坚持使用这种方法。

http://www.xdnf.cn/news/940555.html

相关文章:

  • 算数运算符
  • 【阿里巴巴 x 浙江大学】信息与交互设计 - 交互设计概述
  • HNSW - 分层可导航小世界
  • Secs/Gem第十二讲(基于secs4net项目的ChatGpt介绍)
  • ServerTrust 并非唯一
  • Linux操作系统Shell脚本企业级综合练习
  • 2.1.3_2 编码和调制(下)
  • 面壁智能推出 MiniCPM 4.0 端侧大模型,引领端侧智能新变革
  • Python Day45 学习(日志Day13-14复习)
  • JLINK脚本初始化外部SDRAM STM32H7
  • 基于51单片机的红外防盗及万年历仿真
  • 2025-04-23-基于上下位机结构的系统实例分析
  • 基于n8n指定网页自动抓取解析入库工作流实战
  • 开源一个心流舱付费空间番茄风水钟
  • 车载诊断架构 --- 整车诊断数据管理策略
  • LR修图软件|Lightroom 2025网盘下载与安装教程指南
  • C++_核心编程_菱形继承
  • gem5-gpu教程 在gem5-gpu上运行多个应用程序
  • java复习 05
  • 聊聊集群间数据复制和持久化机制
  • Auto Think,快手开源的自动思考大模型
  • 从一次日期格式踩坑经历,谈谈接口设计中的“约定大于配置“
  • python打卡day48@浙大疏锦行
  • The Quantization Model of Neural Scaling
  • 【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
  • 一张图 介绍什么是字节流
  • 【证书】2025公益课,人工智能训练师-高级,知识点与题库(橙点同学)
  • java 乐观锁的实现和注意细节
  • 【GPT模型训练】第二课:张量与秩:从数学本质到深度学习的基础概念解析
  • 从认识AI开始-----变分自编码器:从AE到VAE