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

Tru*_*e10 1 linux arrays bash debian

line="\t\t\t1\t2\t\t3"
Run Code Online (Sandbox Code Playgroud)

我所做的:

IFS=$'\t'  DIRS=($line);
Run Code Online (Sandbox Code Playgroud)

我想得到什么:

DIRS[0]=NULL; DIRS[1]=NULL; DIRS[2]=NULL; DIRS[3]=1;DIRS[4]=2;DIRS[5]=NULL;DIRS[6]=3;
Run Code Online (Sandbox Code Playgroud)

我真正得到的是:

DIRS[0]=1; DIRS[1]=2; DIRS[2]=3
Run Code Online (Sandbox Code Playgroud)

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

cho*_*oba 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
Run Code Online (Sandbox Code Playgroud)