你在这里混合了几件事。从哪里开始...
向脚本传递值的常用方法是通过位置参数。
假设你有这个脚本,叫做s1:
#!/bin/bash
echo "First two args are: $1 $2"
如果你这样执行:
./s1 Arg1 Arg2
您将看到以下输出:
First two args are: Arg1 Arg2
如果您想将变量名传递给脚本,并让该脚本输出该变量的值,那么您必须做两件事。首先,初始化变量和export,以便子进程可以看到它(包括您将调用的脚本,除非使用source 或. 调用,否则它是一个单独的进程)。
VAR="Some value"
export VAR
您也可以在一条语句中同时执行这两项操作:
export VAR="Some value"
然后,调整脚本以执行对变量的间接访问:
#!/bin/bash
echo "Value of variable named $1 : ${!1}"
请注意,$1 表示“变量 1 的内容”,${!1} 表示“名为 $1 的变量的内容”。这是间接部分。
现在,如果您想更进一步,让脚本以交互方式读取用户输入(不是参数)并使用读取的值作为变量名进行扩展,您可以执行以下操作:
#!/bin/bash
echo "Please enter a variable name"
read VARNAME
echo "Value of variable named $VARNAME : ${!VARNAME}"
使用位置参数使脚本更容易在非交互式场景中重用,因此读取用户输入应仅限于必要的情况。
以上是为了帮助理解基础知识。如果您超越了玩具脚本,您将需要了解间接访问的安全含义(尤其是在您允许用户输入的情况下)。您还需要验证位置参数或用户输入对您的目的是否有效(即包含有效的变量名称),以便您的脚本可以做出适当的反应。好吧,您可能需要检查是否一开始就提供了位置参数。所有这些在 shell 脚本中都是可行的,但超出了单个问题的范围。在任何情况下,如果您打算在需要可靠性的情况下拥有健壮的脚本,则需要检查输入(以及错误)。