Bash は、文字列内の単語分割をすべて単独で実行します。実際、多くの場合、それを回避することが問題であり、引用が非常に重要な理由です。あなたの場合、これを活用するのは簡単です。文字列を引用符で囲まずに配列に入れるだけです。bash は単語分割を使用して個々の要素を分離します。文字列が変数 $str
に格納されていると仮定します 、
ar=($str) # no quotes!
5 つの要素の配列を返します。配列インデックスは単語インデックスです (ほとんどのスクリプト言語やプログラミング言語と同様に、0 からカウントアップします)。つまり、"Age" には
を使用してアクセスします。${ar[1]} # 0 => Name, 1 => Age, 2 => Sex, 3 => ID, 4 => Address
または、内容によって要素インデックスを見つける必要がある場合は、配列をループします。つまり、
function el_index {
cnt=0; for el in "${ar[@]}"; do
[[ $el == "$1" ]] && echo $cnt && break
((++cnt))
done
}
el_index "Age" # => 1
$ export FOO="Name Age Sex ID Address"
*Age を Age に置き換えます -- これにより、"Age" より前のものがすべて削除されます:
$ echo ${FOO/*Age/Age}
Age Sex ID Address
「Age」より前のものを取得
$ echo ${FOO/Age*/}
Name
その文字列の長さを取得します (これは「Age」のインデックスです):
$ BEGIN=${FOO/Age*/}
$ echo ${#BEGIN}
7