![查看所有 UNIX 相关文章/常见问题解答](https://www.alaica.com/wp-content/uploads/linux-17.gif)
在 bash 循环中使用 read 命令时如何设置 IFS(内部字段分隔符)?
IFS 变量用作输入字段分隔符。如果将 IFS 设置为| (即IFS=|),| 分割输入行时将被视为单词/字段之间的分隔符。在读取命令中,IFS 用于分割输入行,以便每个变量获取输入的单个字段。
教程详情 | |
---|---|
难度级别 | 简单的 |
根权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | Linux shell 脚本 |
先决条件 | Bash 或 KSH |
操作系统兼容性 | BSD • Linux • macOS • Unix |
美东时间。阅读时间 | 3分钟 |
查找 IFS 分隔符的默认值
默认值为<space><tab><newline>。您可以使用 echo 命令和cat 命令的以下组合来打印它:
$ cat -etv <<<"$IFS"
或
$ echo "$IFS" | cat -A
示例输出:
^我$ $
该-T选项将制表符显示为^I。使用-v^ 和 M- 表示法,除了用于非打印字符的 LFD 和 TAB。显示在每-E行$末尾。这-A称为显示所有选项,它相当于-vET. 您还可以尝试 printf 命令和 od 命令来查看 $IFS 值:Bash 版本 4.x或更高版本的用户可以尝试以下命令:
$ printf "%q" "$IFS"
$ printf "%s" "$IFS" | od -c
$ printf "%s" "$IFS" | od -to1 -vtc
$ bash --version
$ echo "${IFS@Q}"
Bash / KSH:使用读取命令时定义分隔符 (IFS)
在此示例中,使用 read 命令读取名字和姓氏并将 IFS 设置为空格。例如:
# Bash/KSH: 定义定界符 (IFS) 示例 # IFS = ' ' read -p '输入你的名字和姓氏 : ' First Last echo "Hello, $first $last "
输出示例:
输入您的名字和姓氏 : Vivek Gite 你好,维维克吉特
在此示例中,将 IFS 设置为| 并读取数据:
IFS = '|' 读取域 ip4 ip6 <<< 'google.com|74.125.236.65|2404:6800:4007:801::1008' echo " $domain有$ip4 IPv4 和$ipv6 IPv6 地址。"
输出示例:
google.com 的 IPv4 和 IPv6 地址为 74.125.236.65。
Bash/ksh:带有 IFS 分隔符和读取命令的 while 循环示例
创建一个名为 foo.txt 的文本文件,如下所示:
$ cat foo.txt
示例输出(向其中添加以下文本):
google.com|74.125.236.65|2404:6800:4007:801::1008 i.theos.in|58.27.86.81|2600:807:320:305::3f6e:f648 example.com|75.126.153.206|2600:807:320:305::3f6e:f649
创建名为 demo_ifs.sh 的 bash shell 脚本,如下所示:
#!/bin/bash # 名称:demo_ifs.sh # 目的:解释如何使用 while 循环与 read 和 $IFS # -------------------------- --------------------------- _input = "foo.txt" # 将 IFS(内部字段分隔符)设置为 | # 使用 while 循环读取文件 [ ! -f " $_input " ] && { echo "未找到$_input文件。" ; 1号出口 ;而IFS = ' | ' read -r domain ip4 ip6 do echo " $domain有$ip4 IPv4 和$ip6 IPv6 地址。" 完成< “ $_input ”
按如下方式运行 .sh (bash) 脚本文件:
$ chmod +x -v demo_ifs.sh
$ ./demo_ifs.sh
![Bash KSH 在使用读取命令时定义分隔符 (IFS)](https://www.alaica.com/wp-content/uploads/linux-73.png)
加起来
这就是在 bash/ksh 下定义和读取 IFS 分隔符的方式。有关更多信息,请通过键入以下 man/info 命令或 help 命令在线或离线查看 bash 手册页。例如:
另请参阅bash for 循环和bash while 循环示例页面以获取更多信息。
$ man bash
$ man ksh
$ help read