![回显其中包含变量的字符串而不扩展/评估它](https://linux22.com/image/82350/%E5%9B%9E%E6%98%BE%E5%85%B6%E4%B8%AD%E5%8C%85%E5%90%AB%E5%8F%98%E9%87%8F%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%80%8C%E4%B8%8D%E6%89%A9%E5%B1%95%2F%E8%AF%84%E4%BC%B0%E5%AE%83.png)
我到处都找过了。尝试了回显和打印。尝试过单引号和双引号。但我已经解析了数据并将其分配给一个变量,然后想评估它是否包含变量。然后,我将用通配符替换该变量并搜索该文件。
例子:
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>
我知道这与扩展有关,但不知道如何解决。任何帮助,将不胜感激。谢谢!
答案1
如果您需要$date
在变量 var 内:
var='file.$date.txt'
这会将 $ 保留在变量内:
$ echo "$var" | grep '\$'
file.$date.txt
答案2
在变量周围使用单引号以防止 shell 扩展。例子echo '$file'
就不展开了$file
。
评论后编辑如下:
您可以使用 转义$
符号 intvar
变量var="file.\$DATE.txt"
。