bash メモ
2022/10/22
出力結果を変数に入れる
- コマンド実行結果を入れた変数を出力するとき、改行をそのままにする | ハックノート
- 標準出力を変数に代入する方法あれこれ - 出力を入力へ
- シェルスクリプト 標準出力を変数に設定する | ハックノート
quota=`repquota -a`
改行でループ
- コマンド実行結果を、改めて1行ずつ扱いたい場合 - Qiita
- シェルスクリプトで文字列を分割しても普通の配列にはならない(でもforは使える) - Qiita
- 逆引きシェルスクリプト/スペース区切りの文字列を配列に格納する方法 - Linuxと過ごす
- bashで文字列分解する時、cutやawkもいいけど、setの方が早い、けどreadが最強 - Qiita
- ShellScript 【 while read 】 ファイルを1行ずつ読み込む - Qiita
最終行に改行がない場合
while read line || [ -n "${line}" ]; do
文字列分割
- Bashシェルスクリプトで文字列を分割(split)する方法いろいろ | ゲンゾウ用ポストイット
- シェルスクリプトで文字列の分割 (split) と結合 (join) をする時のベストプラクティス - Qiita
array=(`echo $line`)
スペースで分割ならばこれで配列に入れられる。
関数
文字列結合
- bash 部分文字列・置換・長さ・連結・分割の文字列処理 | バイオインフォ 道場 [bioinfo-Dojo]
- シェルスクリプトで変数値(文字列)を連結する方法まとめ | LFI
- Bash Shell Script - 文字列を連結する方法
hoge=${hoge}'文字列文字列...'
最終行のみカンマを付けない
csvやjsonのように最後のデータのみカンマが不要、というケースをループで処理したい
separator=''
while read line || [ -n "${line}" ]; do
jsonStr=${jsonStr}${separator}'{...}'
if [[ "${separator}" = '' ]]; then
separator=','
fi
done <<END
$hoge
END
逆に最初だけデータの冒頭部(既存データとこれから処理したい新規データの間)にカンマを付けず、それ以降はカンマを付ける、という発想。