变量不会在bash函数中被''替换

时间:2016-12-19 13:54:11

标签: bash

我需要把这个

gulp --cordova 'prepare ios' --buildVars='version:${buildVarVersion},target:${target}' --res=${target}
gulp --cordova 'build ios --device --release --codeSignIdentity=${codeSignIdentity}' --no-build --res=${target}

在一个函数内部。需要保留单引号。我正在努力摆脱正确的逃避。我试过了:

function buildIPA() {
  CFBundleIdentifier=$1
  target=$2
  version=$3
  codeSignIdentity=$4

  buildVarVersion="public";
  if [ "$version" = "enterprise" ]; then
      buildVarVersion="private";
  fi

  gulp --cordova \'prepare ios\' --buildVars=\'version:${buildVarVersion},target:${target}\' --res=${target}
  gulp --cordova \'build ios --device --release --codeSignIdentity=${codeSignIdentity}\' --no-build --res=${target}

};

但似乎这转化为:

gulp --cordova prepare ios --buildVars=version:${buildVarVersion},target:${target} --res=${target}

全部删除单引号。

2 个答案:

答案 0 :(得分:1)

您应该替换所有

gulp --cordova \'prepare ios\' --buildVars=\'version:${buildVarVersion},target:${target}\' --res=${target}

gulp --cordova "prepare ios" --buildVars="version:${buildVarVersion},target:${target}" --res=${target}

否则分词(在空白处)会导致命令收到比预期更多的参数。

答案 1 :(得分:1)

将包含变量的部分用双引号括起来:

gulp --cordova 'prepare ios' --buildVars="'version:${buildVarVersion},target:${target}'" --res=${target}
gulp --cordova "'build ios --device --release --codeSignIdentity=${codeSignIdentity}'" --no-build --res=${target}