拆分制表符将bash中的字符串分隔为数组

时间:2014-12-04 10:05:59

标签: arrays linux bash debian

line="\t\t\t1\t2\t\t3"

我的所作所为:

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

这有可能得到我想要的东西吗?

1 个答案:

答案 0 :(得分:5)

Bash特别在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