■ はじめに
シェルで、split する必要がでてきたので、メモしておく。
目次
【1】シェルで split するには 【2】サンプル 例1:カンマ区切り 例2:ドット区切り(IPアドレス) 例3:export XXX1=YYY1;export XXX2=YYY2;... 【3】補足:配列の長さを求める
【1】シェルで split するには
# ${変数名//置換前文字列/置換後文字列} 【split結果(配列)】=(${【split対象文字列】//【Splitする上でのセパレータ(, とか)】/ })
例:AWS Endpoint から AWS account ID を取得する
# AWS Endpoint(999999999999.dkr.ecr.us-west-2.amazonaws.com) から # AWS account ID (999999999999) を取得する $ target="999999999999.dkr.ecr.us-west-2.amazonaws.com" # ★注目★ $ results=(${target//./ }) # 999999999999 dkr ecr us-west-2 amazonaws com $ echo ${results[@]} # 999999999999 $ echo ${results} # 999999999999 $ echo ${results[0]}
【2】サンプル
例1:カンマ区切り
#!/bin/bash # Ex1 val="Hello,World,!!!" # ${変数名//置換前文字列/置換後文字列} list=(${val//,/ }) echo ${list[@]} echo "*********" echo ${list[0]} echo ${list[1]} echo ${list[2]} echo "*********" # 配列の長さを求める echo ${#list[@]}
出力結果
$ ./sample.sh Hello World !!! ********* Hello World !!! ********* 3
例2:ドット区切り(IPアドレス)
#!/bin/bash # Ex2 val="192.167.11.1" # ${変数名//置換前文字列/置換後文字列} list=(${val//./ }) echo ${list[@]} echo "*********" echo ${list[0]} echo ${list[1]} echo ${list[2]} echo ${list[3]} echo "*********" # 配列の長さを求める echo ${#list[@]}
出力結果
$ ./sample.sh 192 167 11 1 ********* 192 167 11 1 ********* 4
例3:export XXX1=YYY1;export XXX2=YYY2;...
#!/bin/bash # 入力値 #target="${1}" target="export AWS_ACCESS_KEY_ID=AA1;export AWS_SECRET_ACCESS_KEY=BBB2;export AWS_SESSION_TOKEN=CCC3" # target="export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE;export AWS_SECRET_ACCESS_KEY=ASIAIOSFODNN7EXAMPLE;export AWS_SESSION_TOKEN=AQoDYXdzEJr...PxRfiCYEXAMPLEKEY" #AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE;AWS_SECRET_ACCESS_KEY=ASIAIOSFODNN7EXAMPLE;AWS_SESSION_TOKEN=AQoDYXdzEJr...PxRfiCYEXAMPLEKEY target_without_export=${target//export /} aws_params=(${target_without_export//;/ }) AWS_ACCESS_KEY_ID="" AWS_SECRET_ACCESS_KEY="" AWS_SESSION_TOKEN="" for aws_param in "${aws_params[@]}" do key=`echo "${aws_param}"| awk -F'=' '{print $1}'` case $key in AWS_ACCESS_KEY_ID) AWS_ACCESS_KEY_ID=`echo "${aws_param}"| awk -F'=' '{print $2}'` ;; AWS_SECRET_ACCESS_KEY) AWS_SECRET_ACCESS_KEY=`echo "${aws_param}"| awk -F'=' '{print $2}'` ;; AWS_SESSION_TOKEN) AWS_SESSION_TOKEN=`echo "${aws_param}"| awk -F'=' '{print $2}'` ;; *) echo "[WARN] key_value=${key_value}" ;; esac done echo "*********" echo "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" echo "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" echo "AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN}" echo "*********"
出力結果
********* AWS_ACCESS_KEY_ID=AA1 AWS_SECRET_ACCESS_KEY=BBB2 AWS_SESSION_TOKEN=CCC3 *********
【3】補足:配列の長さを求める
* 『${#配列変数名[@]}』で求められる
参考文献
https://www.koikikukan.com/archives/2019/05/09-235555.php
https://genzouw.com/entry/2019/12/17/120057/1831/
関連記事
シェル ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/10/23/005406
シェル ~ 基本編・条件分岐 if / case ~
https://dk521123.hatenablog.com/entry/2015/05/01/000043
シェル ~ 基本編・ループ while / for etc ~
https://dk521123.hatenablog.com/entry/2021/08/09/000000
シェル ~ 基本編 / 配列 ~
https://dk521123.hatenablog.com/entry/2021/08/11/000000
sedコマンド
https://dk521123.hatenablog.com/entry/2019/11/23/101625
awkコマンド
https://dk521123.hatenablog.com/entry/2019/11/22/223043
JDBC を シェルスクリプトでパースする
https://dk521123.hatenablog.com/entry/2020/03/24/223323
シェル ~ 文字列抽出あれこれ ~
https://dk521123.hatenablog.com/entry/2021/08/03/160901
シェル ~ 文字列置換 ~
https://dk521123.hatenablog.com/entry/2023/10/25/000000