聞きたいこと
シェルスクリプト内で宣言した変数は、関数内で宣言されたとしてもグローバルであるとネット上に書いていました。ローカル変数にしたい場合は "local" コマンドを使うと書かれていました。しかし、現在私が作成しているスクリプト内の変数 "array" は関数外で参照すると、要素が格納されていません(関数内で参照すると要素が格納されています)。なぜなのでしょうか?
作成中のスクリプト
*meal_memo.text内に、現在から1時間以内に[満腹]というワードが入っている行があれば、配列"array"に格納していくスクリプトです。
sh
1#!/bin/bash 2 3MEAL_MEMO="~/meal_memo.text" 4BASE_TIME=`date +"%Y-%m-%d %H:%M:%S" -d "-1 hour"` 5 6function check_meal_memo () { 7 tail -20 $MEAL_MEMO | while read line 8 do 9 set -- $line 10 if [ ! "$BASE_TIME" ">" "$1 $2" -a "[満腹]" == "$3" ]; then 11 array+=("$line") 12 echo ${#array[@]} 13 fi 14 done 15} 16 17check_meal_memo 18echo ${#array[@]}
meal_memo.text
2022-03-10 06:00:55 [満腹] オムライスを食べた
2022-03-15 02:14:36 [半分] ラーメンを食べた
2022-04-06 19:01:01 [満腹] 抹茶とクッキーを食べた
2022-04-06 19:10:01 [満腹] アイスティーを飲んだ
実行結果
1
2
0
回答1件
あなたの回答
tips
プレビュー