我想将 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 文件中的内容包含空格。