繁体   English   中英

外壳变量替换问题

[英]shell variable substitution issue

我有一个命令输出一个以变量开头的文件路径名,例如$ DIR1 / file1。 我将此路径名分配给变量pname,现在当我使用该路径读取文件时,变量替换无效。 为了模拟这种情况,

-> cat paths.log
$DIR1/file1

-> DIR1=/var/tmp
-> touch $DIR1/file1
-> pname=`cat paths.log`
-> echo $pname
$DIR1/file1

-> ls -l $pname
$DIR1/file1: No such file or directory

任何人都知道如何解决此问题?

您可以使用envsubst命令执行此envsubst ,避免出现eval的危险,如下所示:

$ cat path.log
$DIR1/file1

$ export DIR1=/var/tmp
$ pname=$(envsubst < path.log)
$ printf "%s\n" "$pname"
/var/tmp/file1

请注意,您必须导出DIR1才能起作用,而不仅仅是分配它。

您需要使用eval来实现字符串内变量的扩展。 在这里,我将expanded设置为expanded结果:

$ pname='$DIR1/file1'
$ echo $pname
$DIR1/file1
$ DIR1=/var/tmp
$ expanded=`eval echo $pname`
$ echo $expanded
/var/tmp/file1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM