Sna*_*xib 5 string bash command-line arguments
所以我有一个bash脚本需要采用任意数量的命令行参数并将它们放入一个字符串中
用户输入内容的示例:
give <environment> <email> <any number of integers separated by spaces>
give testing stuff@things.com 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)
我希望得到从$ 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;
Run Code Online (Sandbox Code Playgroud)
我处理只有三个参数有点不同的情况,并且一个工作正常.
$entList给出这个例子的最终值give testing stuff@things.com 1 2 3 4 5应该是: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
Run Code Online (Sandbox Code Playgroud)
第29和34行是:
line 29: if [ $i -eq 3 ]
line 34: if [ $i -gt 3 ]
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
你走在正确的轨道上.这是我的建议:
if [ $# -ge 3 ]; then
env="$1"
email="$2"
entlist="$3"
while shift && [ -n "$3" ]; do
entlist="${entlist},$3"
done
echo "entlist=$entlist"
else
echo "Arguments: $*"
fi
Run Code Online (Sandbox Code Playgroud)
需要注意的是变量应始终把内报价.我不确定你为什么要设置env=env=$1,但我怀疑如果你想稍后再循环这个值,你应该以编程方式进行,而不是通过评估变量就好像它是一个声明,如果这是你的计划.
| 归档时间: |
|
| 查看次数: |
4877 次 |
| 最近记录: |