shell 多参数,第二个变量$2接收所有参数
方式一:
用 shift
#!/bin/bash
a1=$1
shift
a2=$@
a3=$*
echo "a1=$a1"
echo "a2=$a2"
echo "a3=$a3"
$* 与 $@ 区别:
相同点: 都是引用所有参数。
不同点: 只有在双引号中体现出来。假设在脚本运行时写了三个参数 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}"
参考:
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