【问题标题】:How to keep strings quoted in bash parameters如何在bash参数中保持引用的字符串
【发布时间】:2012-09-24 11:40:02
【问题描述】:

我有一个 Bash 脚本,它传递模式并切换到 grep。

#!/bin/bash

foo() {
    grep $@ *.txt
}

foo $@

当然,myscript SomeText 有效,但 myscript "Text1 Text2" 无效。将参数从脚本传递给 foo() 然后从 foo() 传递给 grep 时,有没有办法保留引号?

请注意,我不能简单地使用 eval 并将整个 $@ 包装在 grep 之前,因为它也可以包含开关,所以我需要保留从命令行传递的原始引用。

谢谢。

【问题讨论】:

    标签: bash parameter-passing double-quotes variable-expansion


    【解决方案1】:

    您的 grep 命令看起来不完整,您是否使用带引号的参数编写这样的脚本:

    #!/bin/bash
    set -x # for debug purpose only, comment out later
    
    foo() {
        grep "$@" *.txt
    }
    
    foo "$@"
    

    然后这样称呼它:

    ./myscript "Text1 Text2"
    

    【讨论】:

    • 谢谢!我以为我已经测试了您的解决方案,但我可能忘记在其中一个调用中引用 $@。
    • @jackhab,引用和未引用的区别在stackoverflow.com/a/12316565/7552进行说明
    【解决方案2】:

    只需引用$@

    #!/bin/bash 
    
    foo() { 
        grep "$@" 
    } 
    
    foo "$@" 
    

    这是$@$* 之间的区别。

    【讨论】:

      猜你喜欢
      • 2014-04-13
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 2011-01-25
      • 1970-01-01
      相关资源
      最近更新 更多