我正在为 linux 终端编写一个 shell 脚本。我希望能够在提示下输入变量名称。例如:
测试.sh:
test="Monkey in the middle..."
read -p "Enter input: " input
echo $input
Run Code Online (Sandbox Code Playgroud)
输出:
Enter input: $test
$test
Run Code Online (Sandbox Code Playgroud)
我希望能够read -p
在脚本的提示部分输入“$test”,并在最后让脚本回显“中间的猴子...”,而不是像现在这样回显“$test”。
我该怎么做?
更新:
使用此处和此线程中提供给我的答案(非常感谢贡献者和评论员!),我设法将这条线拼凑起来,这对我来说非常有效:
newvariable="$(eval echo $input)"
Run Code Online (Sandbox Code Playgroud)
请注意,我不止一次被警告说使用 eval 可能会带来安全风险。如果您选择此解决方案,请记住这一点。
代替
echo "$input"
Run Code Online (Sandbox Code Playgroud)
尝试
eval echo "$input"
Run Code Online (Sandbox Code Playgroud)
它甚至不是特定于 bash 的,适用于 /bin/sh!
请注意,这会带来严重的安全风险,因为eval
它只会执行您提供的内容。在这种情况下,shell 将字符串解释$input
为$test
,然后eval
执行echo $test
。但如果用户输入了怎么办$test; rm -rf *
? eval
将呈现echo $test; rm -rf *
. 如果您这样做,请务必小心。