我正在尝试在bash脚本中链接变量(三个或更多)。例如:
read -e -p "Enter the 5' restriction enzyme:" RE5
我希望用户输入" BamHI",我想将用户输入(BamHI)链接到另一个文本字符串,(" GGATCC")。但我不知道所有用户是否会将其输入为大写或大写,所以为了纠正它我使用:
RE5l=`echo "$RE5" | tr '[:upper:]' '[:lower:]'`
并设置:
bamhi=GGATCC
现在当我输入echo $RE5l
时,我得到了bamhi
,但我希望得到GGATCC
但我不知道该怎么做或出了什么问题。所有建议,更正或其他方式都非常受欢迎。先感谢您。
答案 0 :(得分:1)
#!/bin/bash
# Better to put your "database" in an associative array:
declare -A database
database[bamhi]=GGATCC
read -rep "Enter the 5' restriction enzyme: " RE5
# Bash has builtin operator for lowercase conversion
RE5l=${RE5,,}
# Now you can retrieve the value from the associative array:
printf 'Output: %s\n' "${database[$RE5l]}"
如果要检查数据库中是否存在,请将最后两行替换为:
# Checking whether data is in database
# If exists, retrieve the value from the associative array
if [[ -z ${database[$RE5l]+1} ]]; then
echo "Not found"
else
printf 'Output: %s\n' "${database[$RE5l]}"
fi
答案 1 :(得分:0)
The answer by @gniourf_gniourf是更好的做法,也是你应该接受和使用的。提供此项仅仅是因为它是对该问题的更直接的答案。
几乎你所做的一切都很好:
read -e -p "Enter the 5' restriction enzyme:" RE5
RE5l=${RE5,,}
bamhi=GGATCC
...但如果您想在查找中遵循间接,请使用!
字符执行此操作:
echo "${!RE5l}"
...而不是
echo "${RE5l}"