Bash/KSH:使用read命令时定义定界符(IFS)
时间:2020-01-09 10:45:54 来源:igfitidea点击:
在bash循环中使用read命令时,如何设置IFS(内部字段分隔符)?
IFS变量用作输入字段分隔符。如果将IFS设置为| (即IFS = |),|分割输入行时,将被视为单词/字段之间的分隔符。 在读取命令中,IFS用于拆分输入行,以便每个变量都获得输入的单个字段。
默认值为。
您可以使用以下命令打印它:
cat -etv
输出示例:
^I$ $
在此示例中,使用read命令读取名字和姓氏,并将IFS设置为空白:
IFS=' ' read -p 'Enter your first and last name : ' first last echo "Hello, $first $last"
输出示例:
Enter your first and last name : Hello,
在此示例中,将IFS设置为|。并读取数据:
IFS='|' read domain ip4 ip6 <<< 'google.com|74.125.236.65|2404:6800:4007:801::1008' echo "$domain has $ip4 IPv4 and $ipv6 IPv6 address."
输出示例:
google.com has 74.125.236.65 IPv4 and IPv6 address.
IFS和read命令的while循环示例
创建一个文本文件(名为foo.txt),如下所示:
$ cat foo.txt
输出示例:
google.com|74.125.236.65|2404:6800:4007:801::1008 i.theitroad.com|58.27.86.81|2600:807:320:305::3f6e:f648 theitroad.local|75.126.153.206|2600:807:320:305::3f6e:f649
创建一个bash shell脚本,如下所示:
#!/bin/bash _input="foo.txt" # set IFS (internal field separator) to | # read file using while loop while IFS='|' read -r domain ip4 ip6 do echo "$domain has $ip4 IPv4 and $ip6 IPv6 address." done < "$_input"