Bash 使用可选参数向shell脚本添加附加参数
我有一个shell脚本,它接受1个强制参数和最多3个可选参数,我希望通过能够在不破坏当前设计的情况下再传递一个额外参数来增强脚本。 也就是说,如果我的参数是n,现有的参数是a和b,c和d,那么下面应该可以Bash 使用可选参数向shell脚本添加附加参数,bash,shell,arguments,Bash,Shell,Arguments,我有一个shell脚本,它接受1个强制参数和最多3个可选参数,我希望通过能够在不破坏当前设计的情况下再传递一个额外参数来增强脚本。 也就是说,如果我的参数是n,现有的参数是a和b,c和d,那么下面应该可以 ./script.sh a b c d n ./script.sh a n ./script.sh a b n ./script.sh a b c n 不优雅,但直截了当: case $# in 0|1) printf >&2 "Too few arguments\n"
./script.sh a b c d n
./script.sh a n
./script.sh a b n
./script.sh a b c n
不优雅,但直截了当:
case $# in
0|1) printf >&2 "Too few arguments\n"; exit 1
;;
2) first=$1
second=$2
;;
3) first=$1
optional_a=$2
second=$3
;;
4) first=$1
optional_a=$2
optional_b=$3
second=$4
;;
5) first=$1
optional_a=$2
optional_b=$3
optional_c=$4
second=$5
;;
*) printf >&2 "Too many optional arguments\n"; exit 1
;;
esac
两个必需的参数位于
第一个
和第二个
中;这三个可选参数分别位于optional\u a
、optional\u b
和optional\u c
中。您可以检查最后一个参数是否为n
。如果是这样,请将其从参数列表中删除,并将其余参数添加到数组中,否则将所有参数添加到数组中
if [[ "${@: -1}" = n ]]; then
for j in "${@:1:$(($#-1))}"; do
var+=($j)
done
else
for j; do
var+=($j)
done
fi
echo "${var[@]}"
这将产生:
a b c
当脚本的参数为
abc
和abcn
确定时。您当前的设计是什么?a1=$1 a2=$2 a3=$3 a4=$4 var=($a1$a2$a3$a4)对于${var[*]}@sudeep中的i,使用“${var[@]}”
迭代数组--${var[*]}
连接成标量,然后字符串拆分并用glob展开它…要了解这在实践中的含义,请尝试用“两个字”传递一个参数
。怎么样:var=(“$@”)
——然后您可以拥有所需的任意多个参数。