shell 多参数,第二个变量$2接收所有参数

方式一:

用 shift

#!/bin/bash
a1=$1
shift
a2=$@
a3=$*
echo "a1=$a1"
echo "a2=$a2"
echo "a3=$a3"

image

$* 与 $@ 区别:
相同点: 都是引用所有参数。
不同点: 只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 ” * ” 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)。

$*
获取当前shell脚本所有传参的参数,不加引号和$@相同;如果给$加上双引号,如:"$",则表示将所有的参数视为单个字符串,相当于"$1 $2 $3"

$@
获取当前shell脚本所有传参的参数,不加引号和$相同;如果给$@加上双引号,如:"$@",则表示将所有的参数视为不同的独立字符串,相当于"$1" "$2" "$3" "..."。这是将多参数传递给其它程序的最佳方式,因为它会保留所有的内嵌的每个参数丽的任何空白。当"$@"和"$"都加双引号时,两者是有区别的;都不加双引号时,两者无区别


方式二:
用 数组 方式

#!/bin/bash
EXEC_PARAMS=(${@:2})
echo "EXEC_PARAMS = ${EXEC_PARAMS}"
echo "\${@:1} = ${@:1}"
echo "\${@:2} = ${@:2}"
echo "\${@:3} = ${@:3}"

image




参考:
https://blog.csdn.net/m0_52041525/article/details/123487428
https://www.cnblogs.com/meitian/p/6759206.html
https://zhidao.baidu.com/question/691604425271917164.html
https://blog.csdn.net/lzl759552889/article/details/69228434
https://www.cnblogs.com/yaokaka/p/13766414.html

https://blog.csdn.net/weixin_44687868/article/details/108379536
https://segmentfault.com/q/1010000012726034/a-1020000012741817

posted @   悟透  阅读(583)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示