【发布时间】:2012-06-24 22:03:45
【问题描述】:
所以我有一个 bash 脚本,它需要接受任意数量的命令行参数并将它们放入单个字符串中
用户输入内容示例:
give <environment> <email> <any number of integers separated by spaces>
give testing stuff@things.com 1 2 3 4 5
我想获取从 $3 到 $# 的所有参数并将它们连接成一个字符串。
我现在(可能很糟糕)的解决方案是
if [ $# -gt 3 ]
then
env="env="$1
email="email="$2
entList=""
for i in {3..$#}
do
if [ $i -eq 3 ]
then
entList=$3
shift
fi;
if [ $i -gt 3 ]
then
entList=$entList","$3
shift
fi;
done
fi;
我处理只有三个参数的情况略有不同,并且那个工作正常。
给定示例give testing stuff@things.com 1 2 3 4 5 的$entList 的最终值应为:1,2,3,4,5
现在当我运行它时,我得到以下错误:
/usr/local/bin/ngive.sh: line 29: [: {3..5}: integer expression expected
/usr/local/bin/ngive.sh: line 34: [: {3..5}: integer expression expected
第 29 和 34 行是:
line 29: if [ $i -eq 3 ]
line 34: if [ $i -gt 3 ]
任何帮助将不胜感激。
【问题讨论】:
-
一个常见的解决方案是将前 3 个参数保存在变量中:
var1="$1"; var2="$2"; var3="$3",然后使用shift 3删除前 3 个参数,然后使用"$*"创建一个包含其他参数的字符串,空格分隔:rest="$*".
标签: string bash command-line arguments