2013-03-05 53 views
0

我試圖使用tcsh中column -t -s $'\t'(這在bash的作品),但我不能找到一種方法,使tcsh中相當於它的工作

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

那麼,什麼是相當於tcsh?

+0

[強制性鏈接](http://www.faqs.org/faqs/unix-faq/shell/csh -爲什麼不/)。 – 2013-03-05 19:55:19

回答

1

tcsh沒有在字符串文字中包含非打印字符的機制,除了直接包含它們。

在bash,你可以這樣做(改變echoprintf,因爲它的行爲較爲一致):

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

在tcsh,則可以用文字標籤的字符替換$'\t',通過鍵入Ctrl鍵進入-V選項卡 - 但是當您讀取代碼時,它與空格序列無法區分。

這裏有一個解決方案,使用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 
0

一般來說,你只需用「\ t」作爲製表符。但是,專欄似乎將字面解釋爲反斜槓和字母t。爲了解決這個問題,你可以通過按cntl-v然後tab(用引號括起來)來明確地輸入一個製表符。

但是請注意,在您的具體示例中,根本不需要-s參數,因爲默認情況下,列將按空格分隔。

+0

不,一般''\ t「'是一個由反斜槓後跟字母't'組成的字符串。 *某些*命令會將該序列轉換爲製表符。 'column'在默認情況下使用空格,但手冊頁*不會說它使用製表符。 – 2013-03-05 19:33:06