h4 h7 h8 h9 h7
空白を区切り文字として使用して配列に入れる方法はすでにわかっていますが、h
数字を互いに比較するために数字で区切りたいと思います。
Bashスクリプトでどのように分割できますか?
答え1
#!/bin/bash
arr=( h4 h7 h8 h9 h7 )
for thing in "${arr[@]}"; do
num=${thing#?}
printf 'The number in "%s" is %d\n' "$thing" "$num"
done
変数拡張が${variable#pattern}
一致を削除する最短のプレフィックス文字列です。このパターンは単一文字と一致します。pattern
$variable
?
出力は次のとおりです
The number in "h4" is 4
The number in "h7" is 7
The number in "h8" is 8
The number in "h9" is 9
The number in "h7" is 7
または、長さに関係なく、数字以外の接頭辞の削除を無視するにはsed
、
#!/bin/bash
arr=( hello4 happy7 hobbit8 hulk9 hr-department7 )
for thing in "${arr[@]}"; do
num=$( printf '%s\n' "$thing" | sed 's/^[^[:digit:]]*//' )
printf 'The number in "%s" is %d\n' "$thing" "$num"
done
または、末尾の数字の正規表現一致を使用します。
#!/bin/bash
arr=( hello4 happy7 hobbit8 hulk9 hr-department7 )
for thing in "${arr[@]}"; do
if [[ "$thing" =~ ([[:digit:]]+)$ ]]; then
printf 'The number in "%s" is %d\n' "$thing" "${BASH_REMATCH[1]}"
fi
done