春にはなりましたが、まだまだ寒い日が続きますね。皆さん体調には十分気を付けてください。
一足早く桜の満開を見てきました。河津桜というやつですね。
途中歩いてて何か見たことある景色だなと思ったら、自分のプライベートで使用しているPC(Win)のデスクトップ壁紙(テーマ:Cherry Blossoms)にある景色の場所だったんですね。びっくり。
えー、今回のブログの件名、、どこにでもありそう、、手抜き、、、じゃありません。
立派なTipsです。。。。と言い切ります。。
巷では色々なやり方が紹介されているようですが、なんだかムヅカシイことをやってるのが多いようですので、モットモお手軽な方法(のはず)を紹介します。
※ただし、配列要素自体に空白が含まれる場合は使えませんので、他の方法でゴニョゴニョやってください(無責任)。
bashで以下のように一片たりとも脳ミソを使用せずに配列を関数に渡しますと、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# cat test1.sh #!/bin/bash function echo_arr() { echo "1: ${1}" echo "2: ${2}" echo "3: ${3}" local arr local val arr=(${1}) for val in "${arr[@]}"; do echo ${val} done } ARR=('a' 'b') VAL='c' echo_arr "${ARR[@]}" "${VAL}" exit |
以下のようになっちゃいます。自業自得です。
ダブルクォーテーションで配列を囲むとか悲しくて涙が出てくるぐらいに無駄な抵抗です。
空白で分割された値がそれぞれの引数に渡されるからです。
1 2 3 4 5 |
# ./test1.sh 1: a 2: b 3: c a |
@を*に変えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# cat test2.sh #!/bin/bash function echo_arr() { echo "1: ${1}" echo "2: ${2}" echo "3: ${3}" local arr local val arr=(${1}) for val in "${arr[@]}"; do echo ${val} done } ARR=('a' 'b') VAL='c' echo_arr "${ARR[*]}" "${VAL}" ★ココ! exit |
おおっ
1 2 3 4 5 6 |
# ./test2.sh 1: a b 2: c 3: a b |
というわけです。
そうです。@マークをコメ印に変えるだけです。
・・・考えてみれば当たり前のことなんですが、
・・・我々愚かな人間は、得てして機械にとっては当たり前のことに対して悩むわけです。
しかし、決してここで落ち込んではいけません。気持ちを前向きにケ・セラ・セラと唱えるのがいいでしょう。
因みに、要素に空白がある場合は、、、「ゴニョゴニョやってね」と突き放したもののオモイヤリがモットーであることを思い出しました。ハイ。やります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#!/bin/bash function echo_arr() { echo "1: ${1}" echo "2: ${2}" echo "3: ${3}" local arr local val eval arr=(${1}) for val in "${arr[@]}"; do echo ${val} done } ARR=('a b' 'c d') VAL='e' for STR in "${ARR[@]}"; do QUOTED_ARR+=("'${STR}'") done echo_arr "${QUOTED_ARR[*]}" "${VAL}" exit |
ん~、クォーテーションつけなおして “eval” を使うという、、、
なんかスマートさに欠けますがしょうがないのかな。一応結果は意図したものですが、関数にもとの配列渡してねえじゃんというツッコミが来そう。。
1 2 3 4 5 6 |
# ./test3.sh 1: 'a b' 'c d' 2: e 3: a b c d |
・・・次回カッコイイのちゃんと書きます。