拆分参数并创建一个新变量

拆分参数并创建一个新变量

我的论点看起来像: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是某个整数,其中Z、 和N是单个字符。您想要转换XXXY_ZZNNXXXNN_YZZ从字符串中删除并交换下划线周围的Y和。NN

#!/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"

这是shell使用正则表达式匹配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"

相关内容