String bash中带空格的字符串连接和引号
我在面试中得到了很好的回应。其思想是处理来自命令行的N个输入,将前9个保存到变量中,并生成一个10个以后的字符串 我发现这是最简单的解决办法String bash中带空格的字符串连接和引号,string,bash,whitespace,quote,String,Bash,Whitespace,Quote,我在面试中得到了很好的回应。其思想是处理来自命令行的N个输入,将前9个保存到变量中,并生成一个10个以后的字符串 我发现这是最简单的解决办法 var1="$1" var2="$2" var3="$3" var4="public" var5="$5" var6="''" var7="$7" var8="$8" var9="$9" var10="$(shift 9; IFS=""; echo "$*")" echo snmptrap $var1 $var2 $var3 $var4 $var5 $
var1="$1"
var2="$2"
var3="$3"
var4="public"
var5="$5"
var6="''"
var7="$7"
var8="$8"
var9="$9"
var10="$(shift 9; IFS=""; echo "$*")"
echo snmptrap $var1 $var2 $var3 $var4 $var5 $var6 $var7 $var8 $var9 "$var10"
snmptrap $var1 $var2 $var3 $var4 $var5 $var6 $var7 $var8 $var9 "$var10"
输出如下所示
./snmptas -v 2c -c "" 9.48.85.57 "" 1.3.6.1.4.1.2.6.201.3 s s ABC DDEF EFFF
snmptrap -v 2c -c public 9.48.85.57 '' 1.3.6.1.4.1.2.6.201.3 s s ABCDDEFEFFF
但我想要这张表格里的10美元
“ABC DDEF EFFF”
这需要改变。它正在减少空间
var10="$(shift 9; IFS=""; echo "$*")"
如何使var10=“ABC DDEF EFFF”
谢谢带有回声的子shell在那里并不太合适。这样更好:
shift 9
var10="$*"
如果希望在该值周围加引号,则将最后一行更改为:
var10=\""$*"\"
与此无关,我想知道您对var6
的治疗是否符合您的预期。我怀疑这将更接近你的真实意图:
snmptrap $var1 $var2 $var3 $var4 $var5 '' $var7 $var8 $var9 "$var10"
或者这个:
var6=
snmptrap $var1 $var2 $var3 $var4 $var5 "$var6" $var7 $var8 $var9 "$var10"
但是,如果我的猜测是错误的,并且您最初的处理方法是按预期进行的,那么没关系,忽略这些注释。要使变量var10包含引号,您需要以下内容:
shift 9
printf -v "var10" '"%s"' "$*"
如果您想引用所有变量,以便遗漏的变量有一个位置,请使用以下命令:
#!/bin/bash
set -- -v 2c -c "" 9.48.85.57 "" 1.3.6.1.4.1.2.6.201.3 s s ABC DDEF EFFF
for ((i=1;i<=9;i++)); do
printf -v "var$i" '"%s"' "${!i}"
done
shift 9
printf -v "var10" '"%s"' "$*"
echo snmptrap $var{1..10}
每个参数都有引号,这意味着将它们用作脚本的输入没有问题
$ ./snmptrap
snmptrap "-v" "2c" "-c" "" "9.48.85.57" "" "1.3.6.1.4.1.2.6.201.3" "s" "s" "ABC DDEF EFFF"