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
Stack Overflow
有一個空格,因此在分配給數組時被視為兩個不同的變數。在BASH
甚至其他 shell 中,例如KSH
,等,變數名稱中不能有空格,因此Stack Overflow
即使變數 like 用單引號或雙引號括起來也不起作用。您可以使用以下命令看到這一點:
export Stack Overflow=name echo $Stack Overflow
輸出將
Overflow
作為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 文件中的內容包含空格。