Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String bash中带空格的字符串连接和引号_String_Bash_Whitespace_Quote - Fatal编程技术网

String bash中带空格的字符串连接和引号

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 $

我在面试中得到了很好的回应。其思想是处理来自命令行的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 $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"