bash: 设置带变量的制表符字段分隔符

bash: setting tab field separator with variable

一些 bash 工具,如排序、连接、剪切(所有 coreutils?)需要以一种有点特殊的方式为选项卡传递字段分隔符:sort -t $'\t' ...。这里有很多问题可以解决此行为。

我的问题是我试图将字段分隔符作为变量传递,例如:

SEP="\t"
sort -t $SEP ...

使用普通字符可以,但不能使用制表符。我尝试了一些变体,但其中 none 有效。如何做到这一点?

使用ANSI-C quoting声明它:

sep=$'\t'

并称其为 "$sep",引号对于保留字面意思很重要:

sort -t "$sep" file.txt

示例:

$ cat file.txt 
foo     bar
spam    egg
abc     def

$ sep=$'\t'

$ sort -t $sep file.txt 
sort: multi-character tab ‘file.txt’

$ sort -t "$sep" file.txt 
abc     def
foo     bar
spam    egg

另请注意,为了消除环境变量的歧义,我使用小写字符作为变量名称,除非您有充分的理由也应该这样做。

在按 [TAB] 键之前使用 [CONTROL]+[V] 键引入制表符。

echo "a b   c" |cut -d" " -f2

b

复制粘贴代码时要小心,因为制表符可能会丢失,实际上它们会丢失,在 post :-)