2014-12-04 93 views
1
line="\t\t\t1\t2\t\t3" 

我做什麼:拆分製表符分隔字符串轉換成數組在bash

IFS=$'\t' DIRS=($line); 

我想什麼:

DIRS[0]=NULL; DIRS[1]=NULL; DIRS[2]=NULL; DIRS[3]=1;DIRS[4]=2;DIRS[5]=NULL;DIRS[6]=3; 

我居然得到:

DIRS[0]=1; DIRS[1]=2; DIRS[2]=3 

有可能得到我想要的東西嗎?

回答

5

擊空白特別對待在IFS:

如果IFS具有比缺省以外的值,則 的空白字符空間和標籤的序列在開始時和 字的末尾將被忽略,如只要空白字符在IFS(IFS空白字符)的值中。 IFS中不是IFS空白的任何字符,以及任何相鄰的IFS空白字符, 分隔字段。一系列IFS空格字符也被視爲分隔符。

因此,請使用非空白字符。 (順便說一句,我用$'\t'一個標籤,搜索man bash報價

#!/bin/bash 
line=$'\t\t\t1\t2\t\t3' 

IFS=$':' DIRS=(${line//$'\t'/:})  # Replace tabs with colons. 

for ((i=0 ; i<${#DIRS[@]} ; i++)); do 
    echo "$i: [${DIRS[i]}]" 
done 
+0

謝謝你,它適用於他們。但不是使用':'作爲分隔符,而是使用'|'。 – TrueBlue10 2014-12-04 10:31:04

+0

@ TrueBlue10:使用'$ line'中不能出現的任何內容。 – choroba 2014-12-04 10:32:13