2015-05-03 29 views
1

我有一個以前工作過的小bash腳本。當我使用的Unix IFS從文本文件導入鍵/值:Unix IFS無法設置並將鍵/值數據放入數組

#!/bin/bash 

KEY=/home/myusr/.keyinfo 

IFS=" 
" 
set -A arr $(cat $KEY) 
echo "This is ${arr[0]}" 
echo "This is ${arr[1]}" 

輸入.keyinfo文件:

ABC 123 

不過,我試圖讓這對不同的風味的工作Linux和我收到此錯誤信息:

./tst3.sh: line 7: set: -A: invalid option 
set: usage: set [--abefhkmnptuvxBCHP] [-o option-name] [arg ...] 
This is 
This is 

問:

  • 這是更好的方式使用IFS?最佳實踐?

我想將鍵/值對轉儲到數組中,然後在腳本中稍後調用它們。

+0

什麼是您的IFS包含哪些內容?無法確定哪裏有空白。 –

+0

你的意思是我的輸入文件?我想要創建一個帶有「key value」或「key:value」或「key; value」的密鑰文件的選項,以及分割這些文件的最佳方式。 – noober

+1

不,我是指定義IFS的引號之間的內容。無論如何,'set -A'是ksh:bash沒有'set'的'-A'選項,如錯誤所示。 –

回答

2

您可以通過修改它像這樣使用代碼:

#!/bin/bash 
KEY=/home/myusr/.keyinfo 
IFS=$' ' # omitting this line will do too, as IFS is defaulted to space 
declare -a arr=($(cat $KEY)) 
echo "This is ${arr[0]}" 
echo "This is ${arr[1]}" 

使用declare聲明變量,而不是set

-A選項用於關聯數組,-a用於索引數組。

而不是使用cat你應該考慮使用:declare -a arr=($(< $KEY))

+0

是不是'\ n'是換行符?我得到這些結果:這是'ABC 123這是'我有一個在我的鍵和值之間的選項卡。 – noober

+0

太棒了!感謝您的幫助和解釋,使用它。 – noober