Bash技巧:介绍 $0、$1、$2、$#、$@、$*、$? 的含义
liuian 2024-12-16 14:46 108 浏览
在编写 Linux bash shell 脚本时,经常会用到 $0、$1、$2、$#、$@、$*、$? 等参数,下面具体说明这些参数的含义。
假设执行 ./test.sh a b c 这样一个命令,则可以使用下面的参数来获取一些值:
- $0 对应 "./test.sh" 这个值。如果执行的是 ./work/test.sh, 则对应 ./work/test.sh 这个值,而不是只返回文件名本身的部分。
- $1 会获取到 a,即 $1 对应传给脚本的第一个参数。
- $2 会获取到 b,即 $2 对应传给脚本的第二个参数。
- $3 会获取到 c,即 $3 对应传给脚本的第三个参数。$4、$5 等参数的含义依此类推。
- $# 会获取到 3,对应传入脚本的参数个数,统计的参数不包括 $0。
- $@ 会获取到 "a" "b" "c",也就是所有参数的列表,不包括 $0。
- $* 也会获取到 "a" "b" "c", 其值和 $@ 相同。但 "$*" 和 "$@" 有所不同。"$*" 把所有参数合并成一个字符串,而 "$@" 会得到一个字符串参数数组。
- $? 可以获取到执行 ./test.sh a b c 命令后的返回值。在执行一个前台命令后,可以立即用 $? 获取到该命令的返回值。该命令可以是系统自身的命令,可以是 shell 脚本,也可以是自定义的 bash 函数。
当执行系统自身的命令时,$? 对应这个命令的返回值。
当执行 shell 脚本时,$? 对应该脚本调用 exit 命令返回的值。如果没有主动调用 exit 命令,默认返回为 0。
当执行自定义的 bash 函数时,$? 对应该函数调用 return 命令返回的值。如果没有主动调用 return 命令,默认返回为 0。
下面举例说明 "$*" 和 "$@" 的差异。假设有一个 testparams.sh 脚本,内容如下:
#!/bin/bash
for arg in "$*"; do
echo "****:" $arg
done
echo --------------
for arg in "$@"; do
echo "@@@@:" $arg
done
这个脚本分别遍历 "$*" 和 "$@" 扩展后的内容,并打印出来。执行 ./testparams.sh,结果如下:
$ ./testparams.sh This is a test ****: This is a test -------------- @@@@: This @@@@: is @@@@: a @@@@: test
可以看到,"$*" 只产生一个字符串,for 循环只遍历一次。
而 "$@" 产生了多个字符串,for 循环遍历多次,是一个字符串参数数组。
注意:如果传入的参数多于 9 个,则不能使用 $10 来引用第 10 个参数,而是要用 ${10} 来引用。即,需要用大括号{}把大于 9 的数字括起来。
例如,${10} 表示获取第 10 个参数的值,写为 $10 获取不到第 10 个参数的值。实际上,$10 相当于 ${1}0,也就是先获取 $1 的值,后面再跟上 0,如果 $1 的值是 "first",则 $10 的值是 "first0"。
查看 man bash 里面对位置参数(positional parameters)的说明如下:
Positional Parameters
A positional parameter is a parameter denoted by one or more digits, other than the single digit 0.Positional parameters are assigned from the shell's arguments when it is invoked, and may be reassigned using the set builtin command. Positional parameters may not be assigned to with assignment statements. The positional parameters are temporarily replaced when a shell function is executed.
When a positional parameter consisting of more than a single digit is expanded, it must be enclosed in braces.
即,最后一句提到,当位置参数由多位数字组成时,需要用大括号 {} 把多位数字括起来。
获取位置参数的个数
在 bash 中,可以使用 $# 来获取传入的命令行或者传入函数的参数个数。
要注意的是,$# 统计的参数个数不包括脚本自身名称或者函数名称。
例如,执行 ./a.sh a b,则 $# 是 2,而不是 3。
查看 man bash 的说明如下:
Special Parameters
# Expands to the number of positional parameters in decimal.
可以看到,$# 实际上是扩展为位置参数(positional parameters)的个数,统计的参数不包括 $0。
相关推荐
- 安装系统教程win10(安装系统教程win7)
-
正确安装win10系统的步骤如下:1.确认电脑是否满足win10系统的最低配置要求,如CPU、内存、硬盘空间等。2.下载win10系统镜像文件,可以通过微软官网或第三方下载网站获取。3.制作U盘...
- pps影音手机版下载官网(pps影音百科)
-
区别:1,爱奇艺主打网页播放,PPS主打客户端播放器;2,爱奇艺视频正版高清,PPS不全是高清,有部分盗版;3,爱奇艺在线播放比较好,PPS的P2P加载技术打开视频较快。1、爱奇艺PPS影音其实是爱...
- 百度官方下载安装免费(百度官网免费下载)
-
你好!有两种方法可以免费下载!第一:加入百度文库VIP看百度文库的说明,只要加入百度文库的VIP即可免费下载,不过不推荐这种还是需要花钱的方式第二:下载冰点下载器那这种方法该如何免费下载呢?下面我详细...
-
- windows10更新文件在哪里(win10系统更新文件在哪个文件夹)
-
win10自动更新下载的文件位于C:\Windows\SoftwareDistribution\Download文件夹中。当然我们要找到哪个文件夹确切到哪个补丁并不是那么容易的,因为命名的文件夹都是长长的一段代号,一般我们要删除更新文件的...
-
2026-01-02 03:55 liuian
- 扫描仪怎么安装(信鸽扫描仪怎么安装)
-
扫描仪的安装步骤可能会略有不同,具体取决于您所使用的扫描仪品牌和型号。一般而言,您可以按照以下基本步骤来安装扫描仪:确认您的计算机系统符合扫描仪的最低系统要求。在计算机上插入扫描仪的安装光盘,或从制造...
- u盘怎么启动重装系统(u盘启动重装系统哪个好)
-
1.下载好系统之家U盘以后在电脑上插入U盘并打开软件,软件会自,动配置用户的电脑信息,点击制作U盘启动盘。2.接着就进入了选择系统的界面,在这里选择需要安装的系统版本,然后点击开始制作。3.弹出提示窗...
- photoshopcs6哪一年的(pscs6版本好用吗)
-
pscs6的发行时间是2012年4月24日,该软件是是AdobePhotoshop的第13代,具有多种功能,包括内容识别修补、Mercury图形引擎/3D性能提升/3D控制功能/改良的设计工具/全新的...
- 电脑如何设置自动关机win10(win10系统电脑怎么设置自动关机)
-
windows10自动关机设置方法如下1、打开电脑管家主界面,点击右下角的“工具箱”;2、在工具箱的其他分类中选择打开“健康小助手”;3、健康小助手中有三项功能,护眼配色、定时休息和定时关机,点击定时...
- wan口未连接是欠费吗(wan口未连接是怎么回事)
-
网费欠费了路由器WAN指示灯常亮不闪烁,一个灯亮。路由器正常工作的话,电源指示灯是常亮状态,SYS系统指示灯和WAN指示灯会闪亮,尤其是WAN指示灯的状态有些复杂:如果WAN指示灯不亮,说明网络连接有...
- 如何用手机修复sd卡(如何用手机修复sd卡受损)
-
第一步:将要修复的内存卡,用读卡器连接到电脑上,然后下载失易得数据恢复软件。 第二步:运行软件,选择要恢复的“u盘/储存卡”功能。注:在恢复数据之...
- 惠普台式机bios设置(惠普台式机bios设置核显内存)
-
1、按电源键启动电脑,在屏幕刚亮时,不停点击F10按键,就可以进入BIOS界面;2、如果F10没反应,则在启动时不停点击ESC键;3、这个时候会进入到启动菜单选项,F10BIOSSetup就是BI...
- 搜狗输入法不见了怎么调出来
-
因为在设置里勾选了智能ABC风格,所以他会像智能ABC一样,按空格才会显示。右键点击搜狗皮肤,设置属性,勾选搜狗风格就好了。注意,当你勾选智能ABC风格的时候会自动勾选“按空格出字”。使用【ctrl...
- 类似系统的黑科技网吧(系统的黑科技网吧好看吗)
-
如果机器配置和装修都不追求高档的话应该差不多只要不是全部追求顶配基本上可以
- 输入法哪个好用占内存又小(哪种输入法占内存小)
-
最不占内存的是系统自带的输入法,不过只适合win8用户,对于win7和xp用户推荐qq输入法,不推荐搜狗(1,安装包就可以看出占用系统大小,2,各种后台运行,3,各种广告提醒),除了qq推荐谷歌输入法...
- 2025组装机推荐配置(21年装机配置)
-
1.CPU:Intel酷睿i5-10400F;2.主板:华硕H410M-K;3.内存:金士顿16GBDDR42666MHz;4.硬盘:希捷Barracuda1TB7200转;5.显卡...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
