bashスクリプトとgrep / awk / sedを使用して、単一の文字区切り文字を持つ既知のパターンと一致する行をどのように配列に分割できますtoken1;token2;token3;token4
かa[0] = token1
?a[3]=token4
ベストアンサー1
修正するこの方法で配列を作成することは、IFSが空白ではなく単一文字である場合にのみ適しています。そしてデータ文字列には連続した区切り文字はありません。
この問題に対する解決策と同様の解決策については、ここに進んでください。UnixとLinuxの問題...(IFSのより深い理解のために読む価値があります。
IFS
(内部フィールド区切り文字)bash(およびash、ksh、zshなどの他のPOSIXシェル)を使用します。
挿入されたスペースのみを許可するIFSを使用すると、外部呼び出しを回避できます。
# ==============
A='token0:token1:token2.y token2.z '
echo normal. $A
# Save IFS; Change IFS to ":"
SFI=$IFS; IFS=: ##### This is the important bit part 1a
set -f ##### ... and part 1b: disable globbing
echo changed $A
B=($A) ### this is now parsed at : (not at the default IFS whitespace)
echo B...... $B
echo B[0]... ${B[0]}
echo B[1]... ${B[1]}
echo B[2]... ${B[2]}
echo B[@]... ${B[@]}
# Reset the original IFS
IFS=$SFI ##### Important bit part 2a
set +f ##### ... and part 2b
echo normal. $A
# Output
normal. token0:token1:token2.y token2.z
changed token0 token1 token2.y token2.z
B...... token0
B[0]... token0
B[1]... token1
B[2]... token2.y token2.z
B[@]... token0 token1 token2.y token2.z
normal. token0:token1:token2.y token2.z