在不扩展/求值的情况下回显其中包含变量的字符串


12

我到处搜寻。尝试回显和打印。尝试使用单引号和双引号。但是我已经解析了数据并将其分配给一个变量,然后想对其进行评估以了解其中是否包含变量。然后,我将使用通配符替换变量并搜索文件。

例:

var="file.$DATE.txt"

### Where it goes wrong-  Needs to identify that $DATE is within the $var varaible.
test=$(echo "$var"|grep '\$')
if [[ $test ]]
then
    ### I would use whatever fix is discovered here as well
    test=$(echo $test|sed 's/\$[a-zA-Z]*/\*/')
fi

### (Actually pulling from remote machine to local)
cat $test > /tmp/temporary.file

这至少是我的许多失败之一:

PROMPT> file=blah.$DATE
PROMPT> test=$(echo "$file"|grep '\$')
PROMPT> echo $test
PROMPT>
PROMPT>

我知道它与扩展有关,但不知道如何解决。任何帮助,将不胜感激。谢谢!


您需要解决什么问题?该var包含未扩展的$date?。为此用途:var='file.$DATE.txt'。使用var时要扩展日期?我确定您需要解释您的要求。

抱歉,测试变量是否在“ var”变量中定义。各种各样的嵌套。
krmarshall87 '16

通过立即删除似乎是变量的任何内容(无需我首先关心),并用通配符交换它,我找到了解决困境的方法: sed 's/\${*[a-zA-Z0-9_%]*}*/\*/'
krmarshall87 '16

Answers:


20

如果需要$date在变量var中:

var='file.$date.txt'

这样会将$保留在变量内:

$ echo "$var" | grep '\$'
file.$date.txt

8

在变量周围使用单引号防止外壳扩展。示例echo '$file'将不会扩展$file

在下面的评论后编辑:

您可以使用来$var变量int进行符号转义var="file.\$DATE.txt"


我需要扩展它,但是只有一个层次。忘记添加逐步的期望结果。但是我希望将$ file的内容评估为一个美元符号($ DATE)。
krmarshall87 '16

编辑以解决该问题。
Munir

我从外部来源收到该数据。我认为,即使用\ $代替$,也需要回显。然而,让我看看,当我解析它,我可以挤。
krmarshall87
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.