【问题标题】:Manipulate variables containing quoted strings in a BASH script在 BASH 脚本中操作包含引用字符串的变量
【发布时间】:2012-12-02 08:03:35
【问题描述】:

我必须将data='Type=Eatable Fruits="Apple Orange"' 之类的变量传递给 bash 脚本 (print.sh),该脚本仅逐行打印第一个、第二个和第三个命令行参数。

当我通过运行sh print.sh $data 将变量data 传递给脚本时,输出为

Type=Eatable
Fruits="Apple
Orange"

但那时需要的是

Type=Eatable
Fruits="Apple Orange"
 

第二行也应该打印双引号。 (第三个参数应该是 NULL/Nothing)

我应该改变什么来获得像上面这样的输出?

【问题讨论】:

    标签: string bash variables spaces double-quotes


    【解决方案1】:

    当您运行 sh print.sh $data 时,它会像这样被标记化:

    [sh, print.sh, $data]

    因为$data 没有被引用,所以变量data 的值被标记为

    [Fruits="Apple, Orange"]

    然后将其添加到原始命令中以进行制作

    [shprint.shFruits="AppleOrange"]

    print.sh 被调用 $1=Fruits="Apple, $2=Orange"

    听起来您实际上希望这是print.sh 的一个参数,而不是两个。根据 Pierre-Louis Laffont 的回答,使用 "$data" 而不是 $data 可以实现这一目标

    【讨论】:

      【解决方案2】:

      让你的电话在双引号之间变数:

      $ ./script.sh $data
      Fruits="Apple
      Orange"
      
      $ ./script.sh "$data"  
      Fruits="Apple Orange"
      

      【讨论】:

        【解决方案3】:

        我的两分钱,脚本需要修改。你在用吗

        echo $1
        echo $2
        

        你应该试试

        echo $1 $2
        

        当您传递字符串时,我怀疑所有内容都被视为 arg1 而 arg2 为空。打印 $# 确认。

        【讨论】:

          猜你喜欢
          • 2020-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-04
          • 1970-01-01
          • 2013-11-15
          • 1970-01-01
          • 2022-06-10
          相关资源
          最近更新 更多