各位——
我有点卡住了,在这里。我有一个小脚本,将被合并到一个更大的脚本中。这个小片段应该接受用户输入,并将其与存储变量的列表进行比较。如果用户输入与列出的变量之一匹配,则应输出该变量的字符串;或者,如果它不匹配任何元素,那么它应该将用户输入写入一个新变量。
对于上下文,我所做的是将一些变量定义为字符串(在本例中为教科书的引用信息)。举个例子:
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
或giancoli6
,则应将变量$source
重新定义为分配给相应变量的文本。如果用户输入与这些不匹配,则应将变量$source
定义为用户输入的任何内容。
我似乎遇到的问题是,当用户输入源信息时,如果他们使用buffa7
,bash 似乎认为如果实际字符串buffa7
不在其列表中,那么它不必执行任何操作,并认为buffa7
不在列表中(这是真的,因为$buffa7
是)。任何有关如何进行的建议将不胜感激!
答案1
这可以使用名称引用或变量间接来完成,但您应该做的是使用关联数组。当关联数组可以处理整个条目时,不需要为每个条目使用变量。
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