Bash

將包含空格的 CSV 列提取到 Bash 數組

  • March 25, 2020

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

引用自:https://unix.stackexchange.com/questions/574901