#!/bin/bash
show="ls -al /"
IFS=$'\n'
$show
结果类似于bash: ls -al /: No such file or directory
。
shell无法返回预期的结果。
如果我将IFS更改为$' \n'
(注意我添加了一个空格),那就没关系。
我对IFS知之甚少,有人可以解释一下吗?
答案 0 :(得分:3)
在第一种情况下:
show="ls -al /"
IFS=$'\n'
$show
整个字符串ls -al /
被shell视为命令名,因为IFS中没有空格,变量中的空格不会引起单词拆分。将命令编写为“$ show”就可以完全抑制分词。
在第二种情况下,由于空间是IFS的一部分,因此会发生单词拆分。
另见: