bashスクリプト - 他の配列の値に基づいて配列の値を印刷します。

bashスクリプト - 他の配列の値に基づいて配列の値を印刷します。

2つの配列があり、ARRAY1の対応する値に基づいてARRAY2の値を印刷したいと思います。

#!/usr/bin/env bash

ARRAY1=(bb.service.sql bw.service.sql)
ARRAY2=(bb bw)

case $ARRAY1[@] in

  ${ARRAY1[1]})
    echo ${ARRAY2[1]} ;;

  *)
    echo "unknown" ;;
esac

しかし、私はまだunknownここまで来ています。私は何が間違っていましたか?

ベストアンサー1

$ARRAY1${ARRAY1[0]}bashin(kshからコピーした奇妙なデザイン)の略語です。

$ARRAY1[@]と同じな${ARRAY[0]}[@]ので、インデックス0の要素の値の後にはリテラルが続きます[@]。多くの言語と多くのシェル(csh配列を持つ最初のシェルから始まる)では、$array[1]kshと同様にbashで配列をインデックスできますが、これを行う必要があります${array[1]}。これは、配列のないBourneシェルとの下位互換性を維持するために行われます。

${array[@]}配列のすべての要素に展開されますが、ここではcase文字列のみが一致するため、要素はスペースで連結されてcase一致します。

また、配列を割り当てるときはarray=(foo bar)1以外をfoo入力してください${array[0]}(kshと同じですが、array=(values...)この構文のソースであるzshを含む他のほとんどのシェルとは異なり)。

とにかく、あなたがそれで何をしたいのか明確ではありません。

bbにマッピングしたい場合がありますbb.service.sql。この場合、連想配列を使用することをお勧めします。

#! /bin/bash -
typeset -A map=(
  [bb]=bb.service.sql
  [bw]=bw.service.sql
)
first_parameter=${1?}
corresponding_sql=${map[$first_parameter]?}

?変数を設定しないとエラーが発生します。)

おすすめ記事