Shell IFS 技巧

定义IFS时可以将多个分隔符同时定义到$IFS中去:

#!/bin/bash -x
QUERY_STRING="hostname=eq1-dnsmaster-01&method=disable"
IFS_ORI=$IFS
IFS='=&'
parm=($QUERY_STRING)
for i in ${parm[*]}
do
echo $i
done
IFS=$IFS_ORI
for ((i=0;i<${#parm[@]};i+=2));do declare var_${parm[i]}=${parm[i+1]};done

输出结果

+ QUERY_STRING='hostname=eq1-dnsmaster-01&method=disable'

+ IFS_ORI='

'

+ IFS='=&'

+ parm=($QUERY_STRING)

+ for i in '${parm[*]}'

+ echo hostname

hostname

+ for i in '${parm[*]}'

+ echo eq1-dnsmaster-01

eq1-dnsmaster-01

+ for i in '${parm[*]}'

+ echo method

method

+ for i in '${parm[*]}'

+ echo disable

disable

+ IFS='

'

+ (( i=0 ))

+ (( i<4 ))

+ declare var_hostname=eq1-dnsmaster-01

+ (( i+=2 ))

+ (( i<4 ))

+ declare var_method=disable

+ (( i+=2 ))

+ (( i<4 ))


将$QUERY_STRING分割成为了4个组成部分,即'='和'&’都成为了分隔符,而不是'=&'整体成为分隔符,同时IFS中'='以及'&'的位置可以互换,不影响分割的顺序。

你可能感兴趣的:(shell)