2014-01-08 20 views
0
results= 
results['startlogdate']="Start time" 
results['endlogdate']="$finish_time" 
echo "${results[*]}" 

我想初始化數組,並將值添加到數組並回顯數組。上面的代碼是我的嘗試。如何在shell腳本中使用單維數組並顯示數組?

+0

目前尚不清楚你想要做什麼。你希望'echo「$ {results [*]}」'會打印什麼?另外 - 這是Bash?哪個版本? – ruakh

+0

我是新來的shell腳本,我想添加一個元素到數組中,並根據下面的註釋回顯數組 – user3165241

+0

,如果你不能使用'bash'你能使用'ksh'嗎?下面的大多數答案都適用於舊版本的'ksh'。將腳本的第一行改爲'#!/ bin/ksh'(或正確的路徑到'ksh')。祝你好運。 – shellter

回答

0

finish_time =`date`

結果[0] = 「開始時間」

結果[1] = 「$ finish_time」

回聲$ {結果[@]}

輸出:開始時間週三1月8日12點25分14秒北京時間2014

元素個數:回聲$ {#結果[@]}

bash中的數組是零索引,因此$ {results [0]}將爲「開始時間」,$ {results [1]}將爲「Wed Jan 8 12:25:14 IST 2014」

+0

我收到以下錯誤:結果[0] =開始時間:未找到 test_extract_tom_html.sh:74:results [1] =日期:未找到 test_extract_tom_html.sh:76:錯誤替換 – user3165241

+0

這並沒有解決有關問題聯想索引數組。 – aks

0

If想在bash中使用數組。你將能夠以兩種方式完成。

  1. 在bash中聲明一個數組。
    declare -a Unix=('Debian' 'Red hat' 'Red hat' 'Suse' 'Fedora');
    echo ${Unix[0]} # Prints the first element
    echo ${Unix[*]} # prints all the elements of an array

  2. 直接使用(即)沒有申報。 Unix[0]='Debian';Unix[1]='Red hat'

+0

我得到同樣的錯誤,有一件事它不是bash腳本,正常的shell腳本 – user3165241

+0

這是一個數字索引數組的例子。這個問題被問及關聯索引數組。 – aks

1

在bash腳本,有兩種數組:數字索引和關聯地索引。

根據您的shell的版本,可能不支持關聯索引數組。

相關的在你的問題的例子中,正確的語法來獲得值的數組,每個作爲一個單獨的一句話,就是:

"${results[@]}" 

要獲得的關聯數組,請執行以下操作:

"${!results[@]" 

下面的腳本演示了使用關聯數組。有關更多詳細信息,請參見bash聯機幫助頁中的Arrays部分。

#!/bin/bash 
# tst.sh 
declare -A aa 
aa[foo]=bar 
aa[fee]=baz 
aa[fie]=tar 
for key in "${!aa[@]}" ; do 
    printf "key: '%s' val: '%s'\n" $key "${aa[$key]}" 
done 
echo "${aa[@]}" 
exit 

這裏是輸出:

$ bash tst.sh 
key: 'foo' val: 'bar' 
key: 'fee' val: 'baz' 
key: 'fie' val: 'tar' 
tar bar baz 

最後,我做了我提供的陣列功能(又名「名單」),我已經使用了很多年,使管理該庫數組中的數據容易。

退房https://github.com/aks/bash-lib/blob/master/list-utils.sh

即使你選擇不使用圖書館,你可以通過閱讀代碼中有學到很多關於陣列。

祝你好運。

+0

我的腳本不在bash中,sh shell腳本。聲明未找到錯誤即將發生 – user3165241

+0

在某些Linux/Unix系統上,'sh'與'bash'相同。但是,如果不是,則不支持關聯數組。在這種情況下,只需使用數字索引的數組。如果您希望使用關鍵字,請將數字值分配給關鍵字,並且仍可以用作索引。 – aks

+0

即使在缺省情況下使用'sh'的系統中,腳本中的腳本中仍可以使用'bash',在腳本的第一行使用'#!/ bin/bash'語法。如果你的系統沒有'/ bin/bash',那麼你可以在'/ usr/local/bin/bash'中下載並安裝bash,並在第一個'#!/ usr/local/bin/bash'中調用它腳本的行。 – aks