Bash:用变量设置TAB字段分隔符



一些bash工具,如sort、join、cut(所有的coretils ?)要求字段分隔符以一种比较特殊的方式传递给制表符:sort -t $'t' ...。这里有许多问题可以解决此行为。

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

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

对于普通字符,可以这样做,但对于制表符则不行。我尝试了一些变化,但没有一个有效。如何做到这一点?

使用ANSI-C引号声明:

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

要小心,如果你复制粘贴的代码,作为选项卡可能会丢失,因为他们丢失了,事实上,在这篇文章:-)

最新更新