6

如何使 bash 执行变量值。例如,我们有这段代码,其中变量值设置在单引号(!)中。

#!/bin/bash
V_MY_PATH='$HOME'
echo "$V_MY_PATH"
ls $V_MY_PATH

输出是

$HOME
ls: $HOME: No such file or directory

如果有的话,如何让 bash 将 shell 变量转换为它的值。

我想在 V_MY_PATH='$HOME' 之后添加一些代码来生成类似 echo $HOME 的输出。

这很简单,但我被卡住了。(注意:我知道使用 V_MY_PATH="$HOME" 可以正常工作。)

编辑部分:我只是想让它简单,但我觉得需要一些细节。

我正在从文件中获取参数。这部分效果很好。我不想重述。问题是当我的 V_MY_PATH 包含一个预定义的变量(如 $home)时,它不会被视为它的值。

4

4 回答 4

10

删除单引号

V_MY_PATH='$HOME'

应该

V_MY_PATH=$HOME

你想$HOME用作变量

您不能在单引号中包含变量。

完整脚本:

#!/bin/bash
V_MY_PATH=$HOME
echo "$V_MY_PATH" 
ls "$V_MY_PATH"  #; Add double quotes here in case you get weird filenames

输出:

/home/myuser
0
05430142.pdf
4
aiSearchFramework-7_10_2007-v0.1.rar

等等

于 2013-01-28T12:02:36.950 回答
8

使用变量间接引用:

pete.mccabe@jackfrog$ p='HOME'
pete.mccabe@jackfrog$ echo $p
HOME
pete.mccabe@jackfrog$ ls ${p}
ls: cannot access HOME: No such file or directory
pete.mccabe@jackfrog$ ls ${!p}
bash                        libpng-1.2.44-1.el6      python-hwdata           squid
...
pete.mccabe@jackfrog$ 

${!p} 表示取 $p 的值,该值是我希望引用的内容的变量的名称

于 2013-01-28T12:02:41.270 回答
1

使用eval命令:

#!/bin/bash

V_MY_PATH='$HOME'
echo "$V_MY_PATH"
eval ls $V_MY_PATH
于 2013-01-28T11:57:08.490 回答
0
  1. 您可以使用单引号或双引号,在您的情况下,如果您愿意,可以不使用。

  2. 你没有告诉 bash 变量等于什么。也许是这样的?(除非我误解了你想要做什么)

==================================================== =====================

#!/bin/bash

#########################
#       VARIABLES       #
#########################
V_MY_PATH=home

#########################
#        SCRIPT         #
#########################

echo "What is your home path?"
read $home
echo "Your home path is $V_MY_PATH"
ls $V_MY_PATH

当然,您也可以删除顶部的变量并使用: echo "Your home path is $home"

于 2019-07-03T19:12:32.200 回答