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
这有可能得到我想要的东西吗?
答案 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