What is the exact meaning of IFS=$'
'?
如果下面的示例将
1 2 | IFS=$' ' |
- 美元符号是什么意思准确吗?
- 它在这个特定的地方做什么案例?
- 在哪里可以阅读更多关于这个特定用法的信息(谷歌不允许在搜索中使用特殊字符,我也不知道在其他情况下要查找什么)?
我知道
"
例如,如果我想循环遍历文件的每一行,并想使用for循环,我可以这样做:
1 2 3 | for line in (< /path/to/file); do echo"Line: $line" done |
但是,除非将
1 2 3 4 5 6 7 | OLDIFS=$IFS IFS=$' ' for line in (< /path/to/file); do echo"Line: $line" done IFS=$OLDIFS |
注意:我不需要另一种方法来做同样的事情,我已经知道很多其他方法…我只对那件事很好奇,想知道是否有人能给我一个解释。
"
'
'
'
只是给它的正式名称:字符串构造的形式
这是[ C ],如ANSI字符串转义序列间隙是公认的和扩展的文本等效(湖的完整列表支持下面的转义序列)。
这个男孩的行为
例如,一个
'
另一个有趣的特征是ANSI C CAN转义引号(单引号)
1 | echo $'Honey, I\'m home' # OK; this cannot be done with '...' |
列表支持的转义序列:
Backslash escape sequences, if present, are decoded as follows:
\a
alert (bell)\b
backspace\e
\E
an escape character (not ANSI C)\f
form feednewline
carriage return
\t
horizontal tab\v
vertical tab\
backslash\'
single quote\"
double quotenn
the eight-bit character whose value is the octal value nnn (one to three digits)\xHH
the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)\uHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)\UHHHHHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)\cx
a control-x characterThe expanded result is single-quoted, as if the dollar sign had not been present.
[ 1 ],你可以,但是,在实际的嵌入式newlines……"和"……"的字符串的字符串定义,IU,那你可以跨多行。
从http:/ / / / _ www.linuxtopia.org在线指南bash手册_ _ for _初学者/教派:_ 03.html _ 03
Words in the form"$'STRING'" are
treated in a special way. The word
expands to a string, with
backslash-escaped characters replaced
as specified by the ANSI-C standard.
Backslash escape sequences can be
found in the Bash documentation.found
我想它在六月的脚本到换行转义到适当的ANSI C标准。
重新恢复默认IFS这
1 2 | ar=(123 321); ( IFS=$' '; echo ${ar[*]} ) |
此外,我不相信你真的完全恢复旧的IFS。你应该避免它的双率如
ANSI C字符串是一个关键点。mklement0感谢"。
你可以测试一个ANSI C OD带引号的字符串命令。
1 2 3 4 5 6 7 8 | echo -n $' ' | od -c echo -n ' ' | od -c echo -n $" " | od -c echo -n" " | od -c |
输出:
1 2 3 4 5 6 7 8 9 10 11 12 | 0000000 0000001 0000000 \ n 0000002 0000000 \ n 0000002 0000000 \ n 0000002 |
你可以很清楚的知道意义的输出。
它就像从一个变量的值查询
1 2 3 | VAR='test' echo VAR echo $VAR |
是不同的,所以在美元上evaluates登录的内容。