shell中$*,$@,$# 的区别

摘要:
当$@和$*被双引号括起来时,它们只能被不同的双引号括住:$*将所有参数视为一个字段。$@默认情况下将字段分隔为空格。如果空格在“”中,则它们不会被分割。$@和$*在未封闭时相同。当看到空格时,字段被分割$#程序参数的数量是$吗?获取上次执行命令的返回值。通常,在成功执行$0$1$2等之后返回0。使用命令行参数,例如test.shabc,然后$0是test,$1是a,$2是b,$3是c。一个小示例仅供参考。test.sh的内容如下:#!

$@ 和  $* 只在被双引号包起来的时候才会有差异


双引号括起来的情况:
$*将所有的参数认为是一个字段
$@以 默认为空格 来划分字段,如果空格在“”里面,不划分

没有括起来的情况是$@和$*一样的,见到 空格 就划分字段

$#是 程序的 参数个数(不包括$0)

$? 获取上一次命令执行的返回值,一般 执行 成功 返回0。

$0 $1 $2 以此类推,取命令行参数,如 test.sh a b c ,则 $0 是 test,$1是 a, $2是b,$3是c。


一个小例子 ,仅供参考

test.sh内容如下:

#!/bin/bash

index=1
echo "Listing args with\"\$*\":"
for arg in "$*"

do
echo "Arg #$index=$arg"
let "index+=1"
done

echo "all parameter is one word"
echo

index=1
echo "Listing args with \"\$@\":"
for arg in "$@"
do
echo "Arg #$index=$arg"
let "index+=1"
done

echo "all parameter is all kinds of different words"
echo

index=1
echo "Listing args with \$* "
for arg in $*
do
echo "Arg #$index=$arg"
let "index+=1"
done
echo "all parameter is all kinds of different words"

echo

index=1
echo "Listing args with \$r@ "
for arg in $@
do
echo "Arg #$index=$arg"
let "index+=1"
done

echo

echo "all parameter is all kinds of different words"


运行结果如下
$ ./test.sh 1 2 3 "4 5"
Listing args with"$*":
Arg #1=1 2 3 4 5
all parameter is one word

Listing args with "$@":
Arg #1=1
Arg #2=2
Arg #3=3
Arg #4=4 5
all parameter is all kinds of different words

Listing args with $*
Arg #1=1
Arg #2=2
Arg #3=3
Arg #4=4
Arg #5=5
all parameter is all kinds of different words


Listing args with $r@
Arg #1=1
Arg #2=2
Arg #3=3
Arg #4=4
Arg #5=5
all parameter is all kinds of different words

the number of all parameter is 4




免责声明:文章转载自《shell中$*,$@,$# 的区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Kafka Manager安装部署及使用Centos7.3环境下安装最新版的Python3.8.4下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

shell网络管理

背景知识  联网就是通过网络将主机进行互联并采用不同的规范配置网络上的节点。我们以 TCP/IP 作为网络栈,所有的操作都是基于它进行的。网络是计算机系统中重要的部分。连接在网络上的每个节点都分配了一个用作标识作用的独一的 IP 地址。有很多联网参数,如子网掩码、路由、端口和 DNS 等,我们需要对这些知识有一个基本的理解。   Internet 依靠 T...

Shell脚本学习笔记3——控制GPIO

在我参与维护的一个项目中,硬件上有一处设计失误:本应该短接到地的一个GPIO没有短接到地,导致某一个功能不能实现,正式出货的时候会进行改版。 但目前还处于测试阶段,只需要先把这个功能实现出来,方案有两个,一是硬件上飞线去实现,而是通过软件去拉低这个GPIO。鉴于硬件飞线比较麻烦,所以我们选择软件上写一个脚本来实现。 我们可以先通过命令行来控制某一个GPIO...

Linux declare命令

[ Linux 命令大全Linux declare命令用于声明 shell 变量。 declare为shell指令,在第一种语法中可用来声明变量并设置变量的属性([rix]即为变量的属性),在第二种语法中可用来显示shell函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。 语法 declare [+/-][rxi...

JBOSS未授权访问漏洞复现

目录 1.JBOSS是什么 2.JBOSS未授权访问是什么 3.漏洞环境搭建 4.漏洞复现 进入控制台 进入应用部署页面 上马 5.jexboss工具安装方法: 6.war的制作 1.JBOSS是什么 JBOSS是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理...

Linux的环境变量配置在/etc/profile或/etc/profile.d/*.sh文件中的区别是什么?

@ 目录 login shell non-login shell 它们的区别 Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,~/.bashrc等,下面说明上述几个文件之间的关系和区别。 bash的运行模式可分为login shell和non-login shell。 login she...

Shell编程基础教程1--Shell简介

1.Shell简介   1.1.查看你系统shell信息      cat /etc/shell  命令可以获取Linux系统里面有多少种shell程序      echo $SHELL  命令可以查看当前你所使用的shell是哪一个   1.2.查看文件信息,ls      ls -l  查看文件信息:文件类型、文件权限、文件硬链接数、文件所属用户、文件所...