回显包含变量的字符串而不扩展/评估它

krm*_*l87 17 shell bash quoting

我到处找。试过回声和打印。试过单引号和双引号。但是我已经解析了数据并将其分配给一个变量,然后想评估它是否有一个变量。然后我将用通配符替换变量并搜索文件。

例子:

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
Run Code Online (Sandbox Code Playgroud)

这是我众多失败中的至少一个:

PROMPT> file=blah.$DATE
PROMPT> test=$(echo "$file"|grep '\$')
PROMPT> echo $test
PROMPT>
PROMPT>
Run Code Online (Sandbox Code Playgroud)

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

小智 23

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

var='file.$date.txt'
Run Code Online (Sandbox Code Playgroud)

这将使 $ 保持在变量内:

$ echo "$var" | grep '\$'
file.$date.txt
Run Code Online (Sandbox Code Playgroud)


Mun*_*nir 14

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

在下面评论后编辑:

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

  • 我需要它来扩展,但只有一层。忘记添加一步步所需的结果。但我希望对 $file 的内容进行评估以获取美元符号($DATE)。 (2认同)