Bash
用於搜尋 bash 數組的使用者輸入
伙計們——
我有點卡住了,在這裡。我有一個小腳本,它將被合併到一個更大的腳本中。這個小塊應該接受使用者輸入,並將其與儲存的變數列表進行比較。如果使用者輸入與列出的變數之一匹配,它應該輸出作為該變數的字元串;或者,如果它不匹配任何元素,那麼它應該將使用者輸入寫入一個新變數。
對於上下文,我所做的是將一些變數定義為字元串(在這種情況下,是教科書的引文資訊)。舉個例子:
books=() buffa7="Wilson, Buffa, Lou. Physics. Pearson, 7th edition, 2009. ISBN: 0321601831" books=+("$buffa7") giancoli6="Giancoli, Douglas C. Physics: Principles with Applications. Prentice Hall, 6th edition. ISBN: 0321736990" books=+("$giancoli6")
我對這段程式碼的理解是,它將創建一個數組,
books
並獲取變數$buffa7
並將$giancoli6
它們附加到列表中。我想做的是提示使用者在源上輸入:如果他們輸入buffa7
orgiancoli6
,$source
則應將變數重新定義為分配給相應變數的文本。如果使用者輸入與這些不匹配,$source
則應將變數定義為使用者輸入的任何內容。我似乎遇到的問題是,當使用者輸入源資訊時,如果他們使用
buffa7
,bash 似乎認為如果實際字元串buffa7
不在其列表中,那麼它不必做任何事情,並認為buffa7
不在列表中(這是真的,因為$buffa7
是)。任何有關如何進行的建議將不勝感激!
這可以使用名稱引用或變數間接來完成,但您應該使用關聯數組。每個條目都不需要變數,當關聯數組可以處理整個批次時。
declare -A books books[buffa7]="Wilson, Buffa, Lou. Physics. Pearson, 7th edition, 2009. ISBN: 0321601831" books[giancoli6]="Giancoli, Douglas C. Physics: Principles with Applications. Prentice Hall, 6th edition. ISBN: 0321736990"
然後:
read input source=${books[$input]} # set $source to entry from array if [[ -z $source ]] # if $source is empty after that then # $input was not in array, so source=$input # set $source to $input. fi