【问题标题】:Bash script variables and parameter passingBash 脚本变量和参数传递
【发布时间】:2011-11-14 03:48:23
【问题描述】:

我正在尝试将字符串变量传递给 bash 脚本中的应用程序:

    # launch app for translator to verify
    DIR="$( cd "$( dirname "$0" )" && pwd )"

    langstr="'(English)'"
    case $language in
    "fr") 
        langstr="'(French)'";;
    esac

    echo $langstr
    #$DIR/../Debug/MyApp.app/Contents/MacOS/MyApp -AppleLanguages '(French)'
    $DIR/../Debug/MyApp.app/Contents/MacOS/MyApp -AppleLanguages $langstr

回声显示$langstr 是我所期望的:'(French)'。带有硬编码语言参数的注释行可以正常工作(应用程序以法语启动),但将其替换为带有 $langstr 变量的行会以英语启动应用程序,这可能意味着它以某种方式忽略了它。

我可能需要给自己上一堂关于 bash 变量使用的课程,但我希望同时在这里得到一个快速的答案。

【问题讨论】:

    标签: macos bash scripting shell


    【解决方案1】:

    当您使用这样的变量传递参数时,单引号被认为是参数值的一部分。因此,您的应用程序实际上得到了字符串'(French)',而它可能只需要(French)。将变量赋值更改为langstr="(French)"

    【讨论】:

      【解决方案2】:

      为什么需要在变量中使用 cd 命令?照原样做就行了

      langstr="(English)"
      case $language in
      "fr") 
          langstr="(French)";;
      esac
      
      echo $langstr
      DIR=$(dirname "$0")
      $DIR/../Debug/MyApp.app/Contents/MacOS/MyApp -AppleLanguages "$langstr"
      

      【讨论】:

        猜你喜欢
        • 2011-04-26
        • 1970-01-01
        • 2013-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多