what's the meaning of IFS
来源:互联网 发布:讲文明知礼仪手抄报 编辑:程序博客网 时间:2024/05/22 17:50
IFS stands for “internal field separator”. It is used by the shell to determine how to do word splitting, i. e. how to recognize word boundaries.
Try this in a shell like bash (other shells may handle this differently, for example zsh):
mystring="foo:bar baz rab"for word in $mystring; do echo "Word: $word"done
The default value for IFS consists of whitespace characters (to be precise: space, tab and newline). Each character can be a word boundary. So, with the default value of IFS, the loop above will print:
Word: foo:bar
Word: baz
Word: rab
In other words, the shell thinks that whitespace is a word boundary.
Now, try setting IFS=: before execting the loop. This time, the result is:
Word: foo
Word: bar baz rab
Now, the shell splits mystring into words as well – but now, it only treats a colon as the word boundary.
The first character of IFS is special: It is used to delimit words in the output when using the special $* variable (example taken from the Advanced Bash Scripting Guide, where you can also find more information on special variables like that one):
$ bash -c 'set w x y z; IFS=":-;"; echo "$*"'w:x:y:zCompare to:$ bash -c 'set w x y z; IFS="-:;"; echo "$*"'w-x-y-z
Note that in both examples, the shell will still treat all of the characters :, - and ; as word boundaries. The only thing that changes is the behaviour of $*.
Another important thing to know is how so-called “IFS whitespace” is treated. Basically, as soon as IFS includes whitespace characters, leading and trailing whitespace is stripped from the string to be split before processing it and a sequence of consecutive whitespace characters delimits fields as well. However, this only applies to those whitespace characters which are actually present in IFS.
For example, let’s look at the string “a:b:: c d ” (trailing space and two space characters between c and d).
With IFS=: it would be split into four fields: "a", "b", "" (empty string) and " c d " (again, two spaces between c and d). Note the leading and trailing whitespace in the last field.With IFS= :, it would be split into five fields: "a", "b", "" (empty string), "c" and "d". No leading and trailing whitespace anywhere.
Note how multiple, consecutive whitespace characters delimit two fields in the second example, while multiple, consecutive colons don’t (since they are not whitespace characters).
As for IFS=$’\n’, that is bash-specific syntax. Quoting the bash manpage:
Words of the form $'string' are treated specially. The word expands to "string", with backslash-escaped characters replaced as specified by the ANSI C standard.
\n is the escape sequence for a newline, so IFS ends up being set to a single newline character.
- what's the meaning of IFS
- what's the meaning of these numbers?
- what's the meaning of Shell?
- What's the meaning of EOF ?
- what's the meaning of BPM?
- What's the meaning of the saturation arithmetic
- What 's the meaning of "Windows-on-Windows" layer?
- What's the meaning of x86 and x64 WoW?
- CSDN, what's the meaning.
- long long data type in GCC and what's the meaning of 1LL
- For different transaction types,What's the meaning of fields in MTL_MATERIAL_TRANSACTIONS
- What Is The Meaning of 0.0.0.0 In Routing Table?
- What is the exact meaning of Runtime.getRuntime().totalMemory()
- What are the meaning of the items in the “alignment trap” error message?
- What are the meaning of the code…
- What is the meaning of xmlns:tools in Android XML layout?
- What’s the point of usability testing?
- What's the point of DeferWindowPos?
- Matika版OpenStack伪生产环境部署-添加Compute节点
- 剑指Offer--面试题11 数值的整数次方
- Java的守护线程与非守护线程
- Access Denied: Specified user is not is not a member of TelnetClients group解决方法
- 基于Echarts的销售企业经营数据分析-散点图
- what's the meaning of IFS
- SwipeRefreshLayout采坑笔记
- 一维数组,二维数组,三维数组名的含义
- IO流解析概述
- android手机通讯录数据库重要表介绍
- MySQL各种存储引擎的对比
- 学习感悟:态度决定一切
- 经纪人(图论,fyold算法)
- HTML事件默认行为与事件传播