簡體   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