やりたいこと
BashでforEach関数を実装したい(JavaScriptのArray.prototype.forEachっぽいもの)
- forEachの仕様
引数を二つ受け取り、第一引数の関数を第二引数の配列の各要素に適用する
環境
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
問題
arrayを関数の引数として渡したいのだが、引数として渡す際に文字列にシリアライズしないといけなく、
arrayの要素にスペースが含まれていると期待した動作をしない。
# ./forEash.sh forEach () { local i=0 local arr=(${2}) for v in ${arr[@]} do ${1} "${v}" "${i}" "${2}" (( i++ )) done return 0 }
# ./main.sh source ./forEach.sh myFunc () { echo "[${2}]: ${1}" } main () { local arr=("a b" "c" "d") forEach myFunc "${arr[*]}" } main
# 期待している結果 $ bash main.sh [0]: a b [1]: c [2]: d # 実際 $ bash ./main.sh [0]: a [1]: b [2]: c [3]: d
期待した結果を得るための方法を模索していますがなかなか見つかりません。 よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/15 02:59