1

我正在尝试column -t -s $'\t'在 tcsh 中使用(在 bash 中有效),但我找不到让它工作的方法

echo "selected version\tnew version\nbbb\tccc\n" | column -t -s $'\t'
Illegal variable name

那么 tcsh 中的等价物是什么?

4

2 回答 2

1

tcsh 没有在字符串文字中包含非打印字符的机制,除了直接包含它们。

在 bash 中,您可以这样做(更改echo为,printf因为它的行为更一致):

$ printf "selected version\tnew version\nbbb\tccc\n" | column -t -s $'\t'
selected version  new version
bbb               ccc

在 tcsh 中,您可以将 替换$'\t'为文字制表符,通过键入输入Ctrl-VTab-- 但是当您阅读代码时,它与一系列空格无法区分。

这是一种解决方案,使用printf命令转换\t为制表符:

% printf "selected version\tnew version\nbbb\tccc\n" | column -t -s "`printf '\t'`"
selected version  new version
bbb               ccc

您还可以将制表符存储在变量中;您可以在使用时使用双引号或:t后缀来保留文字值:

% set tab = "`printf '\t'`"
% printf "selected version\tnew version\nbbb\tccc\n" | column -t -s "$tab"
selected version  new version
bbb               ccc
% printf "selected version\tnew version\nbbb\tccc\n" | column -t -s $tab:q
selected version  new version
bbb               ccc
于 2013-03-05T19:42:55.787 回答
0

通常,您只需使用“\t”作为选项卡。但是,column 似乎将其从字面上解释为反斜杠和字母 t。要解决此问题,您可以通过按 cntl-v 然后按制表符(用引号括起来)显式输入制表符。

但是请注意,在您的特定示例中,您根本不需要 -s 参数,因为默认情况下,列以空格分隔。

于 2013-03-05T16:51:20.427 回答