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