スペースを含むCSV列をBash配列に抽出する

スペースを含むCSV列をBash配列に抽出する

CSVブックマークファイルを次にエクスポートしたいと思います。

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

2 つの Bash 配列に分割されます。各配列にはファイルの1列が含まれています。最初の配列は

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

空白の処理に問題があります。cutこのように使ってみよう

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

すべての単語が分離された配列を作成します。たとえばecho ${names[1]}

Stack

まさか

Stack Overflow

ベストアンサー1

Stack Overflow空白があるため、配列に割り当てると2つの異なる変数として扱われます。BASH他のシェル(など)でも、KSH変数名にスペースを含めることはできないため、変数をStack Overflow一重引用符または二重引用符で囲んでも機能しません。

次のコマンドを使用してこれを確認できます。

export Stack Overflow=name
echo $Stack Overflow 

実際、出力は$ Stack(まだ値が宣言または割り当てられていません)Overflowの引数と単語になります。echoOverflow

echo $Overflow

これは、その値を変数に割り当てるコマンドをname使用して出力されます。exportStackOverflow=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

あなたができることの1つは、2つの文字列の間に下線を付けることです:

export Stack_Overlow=name

これによりecho $Stack_Overflow出力が得られますname。 CSVファイルの内容にスペースが含まれているため、より多くの作業が必要です。

おすすめ記事