Paepoi » ShellScript Tips » ShellScript Tips | 配列
ShellScript Tips | 配列
# 最終更新日 2022.05.01
- 一部追記と連想配列を追加
- 一部追記と連想配列を追加
配列 (bash)
#!/bin/bash # 配列というと C 言語のものを想像しますがまったく違いかなり使い辛い # bash では $IFS 区切りの文字列で充分ですが知識だけでも # 配列の作成、括弧で囲む array=(先頭 次の項目 最後) # echo してみる、インデックス指定無しだと先頭が出力される echo $array #=> 先頭 # インデックスは C 言語と同様、ただしブレースが必要 echo ${array[1]} #=> 次の項目 # += で追加できる、括弧で囲む必要あり array+=(追加) # インデックスを使って追加や書き換えできる array[2]=三番目 # 範囲は関係ない、インデックスは並び順ではなく番号 array[10]=九番目 echo ${array[10]} #=> 九番目 # 単なる未定義になる echo 百番目は ${array[100]} です #=> 百番目は です # ポインタではない array[4]=${array[0]} array[0]=最初 echo ${array[4]} #=> 先頭 # 全てを出力する時は @ を指定 # for item in "${array[@]}"; do # にてループ文に使える echo ${array[@]} #=> 最初 次の項目 三番目 追加 先頭 九番目
配列 (zsh)
#!/bin/zsh # zsh の場合はループを使うために必須の知識になります # インデックスがゼロではなく 1 から始まることに注意 # 配列の作成、括弧で囲む array=(先頭 次の項目 最後) # echo してみる、インデックス指定無しだと全部出力される echo $array #=> 先頭 次の項目 最後 # インデックスは C 言語と同様 # bash と違ってブレース不要 # 先頭は 1 で最後は -1 #echo ${array[1]} echo $array[2] #=> 次の項目 # += で追加できる # bash と違い括弧で囲む必要はない #array+=(追加) array+=追加 # @ は bash 互換として使えるようです、不要だけど echo $array[@] #=> 先頭 次の項目 最後 追加 # インデックスを使って追加や書き換えできる # bash と同じだけどインデックス番号に注意 array[3]=三番目 echo $array[@] #=> 先頭 次の項目 三番目 追加 # 範囲は関係ない、インデックスは並び順ではなく番号 array[10]=九番目 echo $array[10] #=> 九番目 # 単なる未定義になる echo 百番目は $array[100] です #=> 百番目は です # ポインタではない array[-2]=$array[1] array[1]=最初 echo $array[-2] #=> 先頭 # for は bash の ISF 区切り同様 for item in $array; do echo "item: $item" done # bash と同じヒアドキュメントで無理やり複数業コメントが可能 # atom, vscode 等は色分けしてくれる : << __OUTPUT__ item: 最初 item: 次の項目 item: 三番目 item: 追加 item: 先頭 item: 九番目 __OUTPUT__r
連想配列
#!/bin/sh # 連想配列は bash zsh ともに一応使えますが、、、、、 # declare で A 属性にする (Associative array) # typeset は bash にて廃止予定らしい declare -A suzuki=([バイク]=かっこいい [車]=ステキ) # 取り出しは配列同様にブレースが必要 echo ${suzuki[車]} # 追加 suzuki[シニアカー]=サイコー # キーを全部取り出しは bash zsh で違っている if [[ $SHELL =~ zsh ]]; then echo ${(k)suzuki[@]} else echo ${!suzuki[@]} fi # 値を全部取り出し echo ${suzuki[@]}
Copyright(C) sasakima-nao All rights reserved 2002 --- 2024.