人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

下記の処理、Bashスクリプト化できますか?

下記スクリプト、Bashスクリプトではどう書くのでしょうか?

<?php
$arr = array('a'=>'A', 'b'=>'B');
foreach ($arr as $k => $v) {
echo "$k => $v".PHP_EOL;
}


●質問者: nannde
●カテゴリ:コンピュータ
✍キーワード:as bash echo PHP スクリプト
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● y-kawaz
●100ポイント ベストアンサー

こんな感じですか?

#!/bin/sh
arr=("a=>A" "b=>B")  #1
for kv in "${arr[@]}"; do  #2
 k="${kv%=>*}"  #3
 v="${kv#*=>}"  #4
 echo "${k} => ${v}" #5
done

一応解説

  1. arrという配列変数に二つの文字列を代入しています。
    • これは arr[0]="a=>A" と arr[1]="b=>B" を1行で行う書式です。
  2. 配列の値をループで回します。
    • arr内の各値は変数 kv に入ります。
    • 配列変数の値は通常は ${arr[0]} や ${arr[1]} でアクセスできますが、${arr[@]} は配列内の全ての値を半角スペース区切りで取得する書式?です。
    • ${arr[@]} ではなく "${arr[@]}" としているのは値に空白が含まれている場合を想定しています。
      • arr=(a "b c") の場合、${arr[@]} は a b c という3つの引数に展開されますが、"${arr[@]}" とすると a と "b c" という二つの引数に展開されます。
  3. 変数 kv に入っている "a=>A"という文字列から a の部分を取り出しています。
    • ${kv%=>*} は変数kvの値の後方から =>* にマッチする部分を削除した値を返します。つまり変数 k には a が入ります。
  4. 変数 kv に入っている "a=>A"という文字列から A の部分を取り出しています。
    • ${kv#*=>} は変数kvの値の前方から *=> にマッチする部分を削除した値を返します。つまり変数 k には A が入ります。
  5. 変数 k と v の値を出力しています。
◎質問者からの返答

ありがとうございます!

バッチリでした!!

かなりテクニックが必要なんですね。

詳しいご解説がとてもとても助かります m(_ _)m

ありがとうございました!!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ