打印匹配后的下一个单词

打印匹配后的下一个单词

我正在 Linux 上的 bash 脚本中尝试以下操作:

envA="prdk8s--staging-a"
envB="prd-k8s--sandbox"

for envCode in $envA $envB;
do
   Code=$(echo $envCode | cut -d "--" -f 1)
   echo $Code
done

但是,这失败了:

cut: the delimiter must be a single character
Try 'cut --help' for more information.

预期输出:

staging
sandbox

有没有办法打印变量值 $envA 和 $envB 中“--”之后的下一个单词?

答案1

您可以使用 shell 自己的参数扩展来修剪前导和尾随组件:

for envCode in "$envA" "$envB"; do 
  t=${envCode#*--}
  printf '%s\n' "${t%-*}"
done
staging
sandbox

如果你想删除##,你可以使用%%最长而不是最短前导和尾随匹配 - 从您的示例中不清楚这是必需的。

参见示例BashGuide:参数扩展

相关内容