Bash $IFS$()是什么意思? 正如标题所说的,我对$IFS感到困惑,我在一个网站上看到它说$IFS可以代替空白,但是我不知道如何。有人能帮我吗?

Bash $IFS$()是什么意思? 正如标题所说的,我对$IFS感到困惑,我在一个网站上看到它说$IFS可以代替空白,但是我不知道如何。有人能帮我吗?,bash,shell,Bash,Shell,通过$IFS$他们可能意味着他们将IFS从默认的空白更改为字符串的结尾 从bash手册页: IFS内部字段分隔符,用于在展开后拆分单词,并使用read builtin命令将行拆分为单词。默认值为`` 它们的意思是执行IFS=$,其作用与执行IFS=$'\0'相同,声明字段分隔符为空字符,表示字符串的结尾 $表示返回括号内命令的输出,这与您只需在终端中按Enter键相同 例如: $ cat test 1 2 3 4 5 6 7 8 9 它将把每个数字作为新变量,因为每个空格(无论是单个

通过$IFS$他们可能意味着他们将IFS从默认的空白更改为字符串的结尾

从bash手册页:

IFS内部字段分隔符,用于在展开后拆分单词,并使用read builtin命令将行拆分为单词。默认值为``

它们的意思是执行IFS=$,其作用与执行IFS=$'\0'相同,声明字段分隔符为空字符,表示字符串的结尾

$表示返回括号内命令的输出,这与您只需在终端中按Enter键相同

例如:

$ cat test
1 2 3 4 5   6    7
8 9
它将把每个数字作为新变量,因为每个空格(无论是单个空格、制表符还是新行)都被视为字段分隔符

$ for i in $(cat test); do echo $i; done
1
2
3
4
5
6
7
8
9
如果我们将IFS更改为$,则输出与文件中的相同:

$ IFS=$();for i in $(cat test); do echo $i; done
1 2 3 4 5   6    7
8 9
取消设置IFS,它会返回到将空白视为IFS

$ unset IFS
$ for i in $(cat test); do echo $i; done
1
2
3
4
5
6
7
8
9
同样,可以使用$'\0'将IFS更改为空字符

IFS=$与IFS=或IFS=基本相同,您将其声明为空字符串,因此bash将字符串结尾作为分隔符。

使用$IFS$可能意味着它们将IFS从默认空白更改为字符串结尾

从bash手册页:

IFS内部字段分隔符,用于在展开后拆分单词,并使用read builtin命令将行拆分为单词。默认值为``

它们的意思是执行IFS=$,其作用与执行IFS=$'\0'相同,声明字段分隔符为空字符,表示字符串的结尾

$表示返回括号内命令的输出,这与您只需在终端中按Enter键相同

例如:

$ cat test
1 2 3 4 5   6    7
8 9
它将把每个数字作为新变量,因为每个空格(无论是单个空格、制表符还是新行)都被视为字段分隔符

$ for i in $(cat test); do echo $i; done
1
2
3
4
5
6
7
8
9
如果我们将IFS更改为$,则输出与文件中的相同:

$ IFS=$();for i in $(cat test); do echo $i; done
1 2 3 4 5   6    7
8 9
取消设置IFS,它会返回到将空白视为IFS

$ unset IFS
$ for i in $(cat test); do echo $i; done
1
2
3
4
5
6
7
8
9
同样,可以使用$'\0'将IFS更改为空字符


IFS=$基本上与IFS=或IFS=相同,您将其声明为空字符串,因此bash会将字符串的结尾作为分隔符来查找。

您能给我们指出该网站,以获取更多上下文吗?当然,但它是一个来自俄罗斯的网站:internal field separator。答案中有解释。如答案中所述:IFS的默认值由空格字符组成,准确地说是空格、制表符和换行符。。因此,它可以替换一个空格以及一些其他字符;在本例中,是一个空命令,因此它实际上什么也不做。通过快速的谷歌翻译,我得到:参数用空格解析,标志用斜杠解析。我们需要绕过这两者。空格用$IFS$遍历,斜杠用….遍历。。。。我相信这是一个打字错误。IFS是内部字段分隔符,用于在展开后进行字拆分,并使用内置读取命令将行拆分为字。默认值为。所以我相信这个网站应该有这样一个声明:空格被$IFS和斜杠划过……你能给我们指一下那个网站吗,来了解更多的上下文吗?当然,但它是一个来自俄罗斯的网站:internal field separator。答案中有解释。如答案中所述:IFS的默认值由空格字符组成,准确地说是空格、制表符和换行符。。因此,它可以替换一个空格以及一些其他字符;在本例中,是一个空命令,因此它实际上什么也不做。通过快速的谷歌翻译,我得到:参数用空格解析,标志用斜杠解析。我们需要绕过这两者。空格用$IFS$遍历,斜杠用….遍历。。。。我相信这是一个打字错误。IFS是内部字段分隔符,用于在展开后进行字拆分,并使用内置读取命令将行拆分为字。默认值为。所以我相信网站应该有声明空间是用$IFS遍历的,斜杠…对我来说,$不会产生换行符。x=$;printf%q$x打印空字符串,但x=$;printf%q$x打印$'\n'换行符。在您的示例中,IFS=$;对于输出与文件中的输出相同,因为整个文件在一次迭代中读取。IFS=$与IFS=或IFS=相同。更好,但仍然有点误导。字符串确实以空字符结尾,但在bash中,您永远无法访问该空字符。它是内部处理的。写入$'\0'实际上会生成一个包含两个空字符的字符串,一个是显式写下的,另一个是bash自动追加以标记字符串结尾的。但是,由于bash在第一个空字符处终止字符串,因此$'\0',甚至$'\0一些长字符串之间没有区别。您是reall
很好,老兄,给我美元不会换行。x=$;printf%q$x打印空字符串,但x=$;printf%q$x打印$'\n'换行符。在您的示例中,IFS=$;对于输出与文件中的输出相同,因为整个文件在一次迭代中读取。IFS=$与IFS=或IFS=相同。更好,但仍然有点误导。字符串确实以空字符结尾,但在bash中,您永远无法访问该空字符。它是内部处理的。写入$'\0'实际上会生成一个包含两个空字符的字符串,一个是显式写下的,另一个是bash自动追加以标记字符串结尾的。但是,由于bash在第一个空字符处终止字符串,所以$'\0',甚至$'\0和一些长字符串之间没有区别。你真的很好,伙计