When setting IFS to split on newlines, why is it necessary to include a backspace?
我很好奇为什么在将ifs设置为这样的换行符时需要退格:
为什么我不能只用这个(不起作用)来代替呢?
我在一个Linux系统上,用Unix行尾保存文件。我已经用换行符将文件转换为十六进制,它肯定只使用"0A"作为换行符。
我在谷歌上搜索了很多页面,虽然很多页面都记录了换行符和退格符的解决方案,但没有一个页面能解释为什么需要退格符。
-戴维。
- 有人能说一下他们在哪里看到这样的代码吗?谢谢您。
- @spbnick每当您想迭代文件时,例如在for file in $(ls) ; do echo"$f" ; done中,都需要重置ifs。如果不将ifs设置为仅换行,for循环将分别回送每个文件名中每个空格分隔的块,而不是整个文件名。
- 谢谢@bleistift2,我理解为什么有人想要更改ifs,我理解代码是如何工作的(我的答案是这里最流行的)。我只是好奇国际单项体育联合会中退格字符的特殊用法是从哪里来的,是谁从历史上提出的。因此,我在问人们在哪里见过这种代码。
因为正如bash手册所说,关于命令替换:
Bash performs the expansion by executing command and replacing the command substitution with the standard output of the command, with any trailing newlines deleted.
因此,通过添加\b,可以防止删除
。
一种更简单的方法是使用$''引用,如下所示:
- 在POSIX $'...'是包含性。〔〕/〔mywiki.wooledge.org bashism view.php austingroupbugs.net /?id = 249)
- 我做这些是to be included some POSIX at currently点,这是他们的工作不会与T和T /斌/ SH在许多地方对POSIX links which not bash外壳。
- 但我想newline分裂数组使用读命令。is the only first item added to the hostarray抽取。but has the items主机4。host=$(mysql -S $socket $catalog --skip-column-names -e"select host from mysql.user); echo"Host: $host"; IFS=$'
';read -ra hostArray <<<"$host"; echo"HostArray:$hostArray" #This prints only 1 item. But there are 4 items;什么是错?
我只记得最简单的方法。在Debian气喘上用bash测试。
别开玩笑了)
- 这也似乎是POSIX LOL
- 但它不是一个眼线?如果你吗?- specially need to the old as IFS定义:stackoverflow.com美元,在1406966 /问题/ / & hellip;
- 你自制的人,我的天!在POSIX和工厂也不开玩笑。
这是因为使用了echo和命令替换。
1 2 3 4 5 6 7 8
| prompt> x=$(echo -en"
")
prompt> echo ${#x}
0
prompt> x=$(echo -en"
\b")
prompt> echo ${#x}
2 |
$()条尾随的换行符和\b防止
成为尾随的换行符,同时在任何文本中都极不可能出现。IFS=$'
'是设置国际单项体育联合会在新线上进行拆分的更好方法。
- demonstrates that this as the Formation也包括
\bBackspace安IFS定界符,我知道我没有在那一些特殊考虑。
只需按Enter键而不指定任何内容也可以。不过,似乎有人犯了错误,很难理解。
- 这集不安empty string to IFS美元?
- 嗯,你是出版社Enter after the = sign for it to work。恩,当我已经工作了。北克利尔moddie' S @答案更多。