2015-09-20 94 views
0

使用bash,我試圖打印整個文本文件,包括文本文件中的變量值而不是文本文本($ var)。貓可以從文本文件內聯打印變量嗎? bash

txtfile.txt

Here is some text. $var1 Here is some more. $var2 

使用cat

cat txtfile.txt 

打印

下面是一些文字。 $ var1這裏還有一些。 $ var2

我怎樣才能得到它來擴展$ var1和$ var2的輸出值?

+2

這些變量來自哪裏? Arw那些Bash變量?還是環境變量? –

+0

BinaryZebra指出我在答案中提出的錯誤,所以我將其刪除。因爲這個文件可能包含表達式'$(運行這個命令)',所以任何事情都會有安全問題。 – Davislor

+0

你可以試試'echo -e「$(cat file)」' –

回答

0

執行變量擴展的唯一方法是在shell解析一行時。

這隻能通過使var:一行被shell處理來完成。

這可以通過命令eval或通過調用sh -c "$var"完成。

這將做什麼你問(這是一個非常不安全的想法):

#!/bin/bash 
var1="This is OnE var" 
var2="This is var TwO" 

while read -r line; do 
    eval echo "$line" 
done <txtfile.txt 

與包含文件txtfile.txt:

this is var1=$var1 inside 
the file, and var2=$var2. 

上面會輸出的腳本:

this is var1=This is OnE var inside 
the file, and var2=This is var TwO. 
0

這樣做的一個更安全的方法是擴展你想允許的變量,你自己。這不會運行命令,使用shell替換例如來隱藏文件本身。$(chmod -R 777 ~ | true)

例如:$(sed -r -e "s/\\\$var1\\b/$var1/g" -e "s/\\\$var2\\b/$var2/g" < file.txt)。您也可以使用perl

請注意,在此示例中,您必須在$var1$var2本身內逃脫任何/分隔符的實例。