field
A unit of text that is the result of one of the shell expansions. After expansion,
when executing a command, the resulting fields are used as the command name and
arguments.
这是什么意思?如果我ls /etc/*
我会得到一堆字段(文件名),例如:motd,passwd - 在这种情况下,带空格的文件怎么样?这是通配的,你会得到一堆保留空白的单词。
关于freenode #bash的家伙提到:
<geirha> The term field is mainly only used when talking about the read command
<geirha> read -r foo bar <<< "$line" splits line on IFS and assigns the first field (word) to foo, and the rest of the line to bar
<geirha> # line='Hello, World!'; read -r foo bar <<< "$line"; echo "\$foo is $foo. \$bar is $bar"
<shbot> geirha: $foo is Hello,. $bar is World!
<[arx]> # touch foo 'bar baz' $'qux\nquux'; printf '<%s>' *; echo
<shbot> [arx]: <bar baz><foo><qux
<shbot> [arx]: quux>
<[arx]> veek: globbing generates WORDs, the whitespace is preserved.
但是我不太清楚...... <<<word
就像 HERE 所以基于IFS扩展了这个词,你得到的是字段?但是在另一个例子中[arx]那是什么意思呢?
答案 0 :(得分:1)
你所谓的“保留空格的一堆词”基本上是一个字段的定义。可以将字段视为信息边界,由IFS变量(字拆分)分隔。
使用awk可能更容易将其可视化,因为awk具有明确的字段用法。
考虑一下:
echo foo + bar + haz | awk '{print $3}'
awk也使用IFS进行分割,这里我们要求打印$ 3字段。如果我们将回显的字符串分成不同的单元,我们得到这些:
value field #
foo $1
+ $2
bar $3
+ $4
haz $5
因此该行将打印“bar”。
现在,假设我们告诉awk使用“+”作为分隔符而不是IFS进行拆分:
echo foo + bar + haz | awk -F+ '{print $3}'
字段将如下所示:
value field #
foo $1
bar $2
haz $3
因此输出将是“haz”。
也许您可以将字段视为数据列,以便更好地掌握它。有关bash中关于单词拆分字段的更深入阅读,我建议您查看http://mywiki.wooledge.org/WordSplitting