【问题标题】:Shell script pass arguments with spacesShell 脚本传递带空格的参数
【发布时间】:2015-03-28 22:43:39
【问题描述】:

我想将参数从一个 shell 脚本(比如 script1)传递给另一个。一些参数包含空格。所以我在参数中包含了引号,在传递给 script2 之前,我附和了它。是这样的,

echo $FL gives
-filelist "/Users/armv7/My build/normal/My build.LinkFilelist" -filelist "/Users/arm64/My build/normal/My build.LinkFilelist"

但是当我这样做时

script2  -arch armv7 -arch arm64 -isysroot /Applications/blahblah/iPhoneOS8.1.sdk $FL

如果我这样做,在脚本2中,

 for var in "$@"
  do
      echo "$var"
  done

我还是得到了

"-arch"
"armv7"
"-arch"
"arm64"
"isysroot"
"/Applications/blahblah/iPhoneOS8.1.sdk"
"-filelist"
""/Users/armv7/My"
"build/normal/My"            // I want all these 3 lines together
build.LinkFilelist"" 
"-filelist"
""/Users/arm64/My"
"build/normal/My"
build.LinkFilelist""

有人可以纠正我的错误吗?我应该怎么做才能把提到的论点作为一个整体。

【问题讨论】:

  • mywiki.wooledge.org/BashFAQ/050 不要将带引号的字符串粘贴在变量中并期望它们能够工作,但它们不会。直接传递参数即可。
  • 如何设置 FL 变量?像这样 -filelist /Users/armv7/My build/normal/My build.LinkFilelist -filelist /Users/arm64/My build/normal/My build.LinkFilelist ?

标签: bash shell echo


【解决方案1】:

在变量值中嵌入引号没有任何用处。正如@Etan Reisner 所说,请参阅http://mywiki.wooledge.org/BashFAQ/050。在这种情况下,最好的答案可能是将 FL 存储为一个数组,而不是一个普通的变量:

FL=(-filelist "/Users/armv7/My build/normal/My build.LinkFilelist" -filelist "/Users/arm64/My build/normal/My build.LinkFilelist")

请注意,引号不作为数组元素的一部分存储;相反,它们用于强制将路径视为单个数组元素,而不是被空格分解。然后使用"${FL[@]}" 引用它,这使得 bash 将每个元素视为一个参数:

script2 -arch armv7 -arch arm64 -isysroot /Applications/blahblah/iPhoneOS8.1.sdk "${FL[@]}"

【讨论】:

    【解决方案2】:

    1- 使用以下内容(在 FL 周围加上“”):

    script2  -arch armv7 -arch arm64 -isysroot /Applications/blahblah/iPhoneOS8.1.sdk "$FL"
    

    2- 然后在您的 script2 中使用(根据您知道的格式提取变量):

    for arg; do # default for a for loop is to iterate over "$@"
       case $arg in
        '-filelist'*) input=${arg} ;;
          esac
    done
    

    3- 现在您可以使用awk 将输入参数分解为您想要的任何格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多