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 :-)
一些 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 :-)