使用冒号和可选的位置参数在Bash脚本中附加命令?

时间:2016-08-29 19:58:28

标签: bash shell

我有一个小的Bash脚本,它运行一个命令,该命令基本上是一个包含环境变量的长字符串,以文件的路径结尾。

function ios-run-test() {
  thing="DEVICE_TARGET=abcde12345
  DEVICE_ENDPOINT=http://192.168.1.1:37265
  BUNDLE_ID='com.app.iPhoneEnterprise'
  DISABLE_ADS=1
  env=$1
  DISABLE_LOGIN_INTERSTITIALS=1
  bundle exec cucumber --tags ~@wip --tags ~@ignore --tags ~@android
  ~/Automation/ios-automation/features/$2.feature"

  if [[ $3 ]]; then
    add_this=$3
    thing="${thing:$add_this}"
  fi

  echo ${thing}
  eval universal-variables
  eval ${thing}

}

有时,该命令可能会以:some_integer结尾,例如DEVICE_TARGET=abcde12345 DEVICE_ENDPOINT=http://192.168.1.1:37265 BUNDLE_ID='com.app.iPhoneEnterprise' DISABLE_ADS=1 env=production DISABLE_LOGIN_INTERSTITIALS=1 bundle exec cucumber --tags ~@wip --tags ~@ignore --tags ~@android ~/Automation/ios-automation/features/login.feature:5。这就是我的问题所在。我发现Substring Extraction非常简洁,但导致if语句失败:

  if [[ $3 ]]; then
    add_this=$3
    thing="${thing:$add_this}"
  fi

不是将$thing附加到":$3",而是删除$thing的前3个字符。是否有其他方法可以获取可选的位置参数并将其附加到命令中?

1 个答案:

答案 0 :(得分:2)

如果您只想附加:$3,请更改此行:

thing="${thing:$add_this}"

对此:

thing="${thing}:$add_this"

在Bash中附加值只需一个接一个地写入它们即可。 在这个例子中,大括号是可选的, 所以简单地thing="$thing:$add_this"是等价的。 在${...}内,您可以根据变量执行各种高级操作, 但这些都不是您的用例所必需或相关的。