一致した後、次の単語を印刷します。

一致した後、次の単語を印刷します。

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

シェル独自のパラメータ拡張を使用して、前と後のコンポーネントをトリミングできます。

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

削除したい場合は、##次のものを使用できます。%%最長代わりに最短先行と末尾の一致 - これが必要かどうか、あなたの例では明確ではありません。

例を見るBashGuide: パラメータ拡張

おすすめ記事