【问题标题】:String Concatenation in bash with space and putting quote aroundbash中的字符串连接,带有空格并加上引号
【发布时间】:2016-05-25 05:44:16
【问题描述】:

我的last question 得到了很好的回应。这个想法是从命令行处理 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

但我想要这种形式的 $var10

“ABC DDEF EFFF”。

这需要改变。它正在消除空间。

var10="$(shift 9; IFS=""; echo "$*")"

如何使 var10 = "ABC DDEF EFFF"?

谢谢

【问题讨论】:

    标签: string bash whitespace quote


    【解决方案1】:

    带有 echo 的子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"
    

    但是,如果我的猜测是错误的,并且您的原始治疗按预期工作,那么没关系,请忽略这些评论。

    【讨论】:

      【解决方案2】:

      要让变量 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}
      

      要让脚本读取传递的参数而不是代码中写入的参数,只需注释掉 set -- 行。


      输出将是:

      $ ./snmptrap 
      snmptrap "-v" "2c" "-c" "" "9.48.85.57" "" "1.3.6.1.4.1.2.6.201.3" "s" "s" "ABC DDEF EFFF"
      

      每个参数都有引号意味着将它们用作脚本的输入没有问题。

      【讨论】:

        猜你喜欢
        • 2016-02-25
        • 2012-05-10
        • 2011-01-26
        • 1970-01-01
        • 2018-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多