如何在bash中重定向/链接变量?

时间:2014-10-04 16:36:51

标签: bash shell variables echo

我正在尝试在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

但我不知道该怎么做或出了什么问题。所有建议,更正或其他方式都非常受欢迎。先感谢您。

2 个答案:

答案 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}"