お知らせ
現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
配列をループして処理したい時に使える技。複数行ある場合も想定
スペースで区切った文字列を()
で括っておくとfor in
として使える
取り出した要素は${foo}
で拾えます。配列全体は${bar[@]}
で取れる。以下のようにダブルクォートで囲っていると機能しなくなるので注意
("AAA BBB CCC")
#!/bin/bash
textList=(YWFhYWEK LWFhYQogICAtIOOBguOBguOBguOBgg== LWFhYQogICAtIOOBguOBguOBguOBgg==)
for text in "${textList[@]}"
do
echo ${text}
done
YWFhYWEK
LWFhYQogICAtIOOBguOBguOBguOBgg==
LWFhYQogICAtIOOBguOBguOBguOBgg==
Base64辺りでエンコードしておくと扱いが楽
#!/bin/bash
textList=(YWFhYWEK LWFhYQogICAtIOOBguOBguOBguOBgg== LWFhYQogICAtIOOBguOBguOBguOBgg==)
for text in "${textList[@]}"
do
pure=$(echo ${text} | base64 -d)
echo "$pure"
done
aaaaa
-aaa
- ああああ
-aaa
- ああああ
ls
の結果を配列にする#!/bin/bash
# .と..は除外
# 最後にxargsを入れておくと改行が飛ぶ
results=($(ls -1a | grep -vP "^\.+$" | xargs))
for item in "${results[@]}"
do
echo "$item";
done
IFS変数に区切り文字を設定することで実現する。IFSとはInternal Field Separatorのこと
#!/bin/bash
IFS=$'\n'
text=$(cat <<'EOF'
aa bb
a b c
EOF
)
textList=($(echo "$text"))
for text in "${textList[@]}"
do
echo "${text}"
done
aa bb
a b c