将包含空格的 CSV 列提取到 Bash 数组

将包含空格的 CSV 列提取到 Bash 数组

我想将 CSV 书签文件导出为

Physics,physics.stackexchange.com
Stack Overflow,stackoverflow.com
Unix & Linux,unix.stackexchange.com

分成两个 Bash 数组。每个数组将包含文件的一列。第一个数组是

"Physics"   "Stack Overflow"   "Unix & Linux"

我在处理空白处遇到麻烦。我尝试cut像这样使用

declare names=($(cut -d ',' -f1 ~/bookmarks.csv))

它生成一个数组,其中所有单词都被分隔开。举个例子,echo ${names[1]}返回

Stack

并不是

Stack Overflow

答案1

Stack Overflow有一个空格,因此在分配给数组时它被视为两个不同的变量。在BASH甚至其他 shell(如KSH等)中,变量名称中不能包含空格,因此即使变量Stack Overflow用单引号或双引号括起来,也无法工作。

您可以使用以下命令查看这一点:

export Stack Overflow=name
echo $Stack Overflow 

实际上,输出将是isOverflow的参数echo$Stack(尚未声明或分配值)和单词Overflow

echo $Overflow

这将输出name为使用export将该值分配给变量的Stack命令Overflow=name

如果您尝试以下任一操作:

export "Stack Overflow'=name
export 'Stack Overflow'=name

您将收到错误-bash: export: Stack Overflow=name': not a valid identifier-bash: export: Stack Overflow=name': not a valid identifier.

您可以做的一件事是在两个字符串之间放置下划线:

export Stack_Overlow=name

这样,echo $Stack_Overflow就会输出name.这将需要您做更多的工作,因为 CSV 文件中的内容包含空格。

相关内容