パラメータを分割して新しい変数を作成します。

パラメータを分割して新しい変数を作成します。

私の引数は次のとおりです。My_Submit.sh May5_2014引数からインスピレーションを受けて新しい変数を生成したいと思います。この変数は次のようになりますMay14_5

答え1

そしてzsh

#! /bin/zsh -
set -o extendedglob
zmodload zsh/langinfo
date=${1?date not specified}

if
  [[ $date = (#b)(${(vj[|])~langinfo[(I)ABMON_<1-12>]})(<1-31>)_20([0-9][0-9]) ]]
then
  newdate=$match[1]$match[3]_$match[2]
else
  print -ru2 -- $date is not in the right format
  exit 1
fi

print -r New date is $newdate.

これは、ロケールデータから略語リストを取得するモジュールによって行われますzsh/langinfo。ユーザーのロケールに関係なく、略語が英語の略語である必要がある場合は、${(vj[|])~langinfo[(I)ABMON_<1-12>]}に変更しますJan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec

答え2

XXXY_ZZNN単一の引数の文字列が、数字のない任意のXXX文字列であり、Y一部の整数である形式であるとします。ここで、とZN単一文字です。文字列の下線の周りの合計をに変換、削除、およびXXXY_ZZNN交換しようXXXNN_Yとしています。ZZYNN

#!/bin/bash

if [[ $1 =~ ^([^[:digit:]]+)([[:digit:]]+)_..(..)$ ]]; then
    printf -v variable '%s%s_%s' \
        "${BASH_REMATCH[1]}" "${BASH_REMATCH[3]}" "${BASH_REMATCH[2]}"
else
    echo 'Argument missing or on the wrong format' >&2
    exit 1
fi

printf 'Variable = "%s"\n' "$variable"

ここでは、シェルは正規表現一致を使用してbash入力文字列の一部を識別します。式が一致すると、一致する文字列の一部が再配列され、新しい値が形成されます。値は名前付き変数に割り当てられますvariable(最後に出力)。

テストしてみてください:

$ ./script May5_2014
Variable = "May14_5"
$ ./script Bumblebee10_1973
Variable = "Bumblebee73_10"
$ ./script Bumblebee10_173
Argument missing or on the wrong format
$ ./script Bumblebee10_ABCD
Variable = "BumblebeeCD_10"

関連情報