매개변수를 분할하고 새 변수를 만듭니다.

매개변수를 분할하고 새 변수를 만듭니다.

내 인수는 다음과 같습니다. 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"

관련 정보