Shell脚本使用空格传递参数

时间:2015-01-29 16:06:53

标签: bash shell echo

我想将参数从一个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

如果我这样做在script2中,

 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""

有人可以更正我的错误吗?我该怎么做才能将上述论点作为一个整体来做。

2 个答案:

答案 0 :(得分:2)

在变量的值中嵌入引号并没有做任何有用的事情。正如@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[@]}"

答案 1 :(得分:0)

1-使用以下内容(put""在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将输入参数分解为您想要的任何格式。