【Shell】シェルで split するには

■ はじめに

シェルで、split する必要がでてきたので、メモしておく。

目次

【1】サンプル
 例1:カンマ区切り
 例2:ドット区切り(IPアドレス)
 例3:export XXX1=YYY1;export XXX2=YYY2;...
【2】補足:配列の長さを求める

【1】サンプル

例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
*********

【2】補足:配列の長さを求める

* 『${#配列変数名[@]}』で求められる

参考文献

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