使用bash,我試圖打印整個文本文件,包括文本文件中的變量值而不是文本文本($ var)。貓可以從文本文件內聯打印變量嗎? bash
txtfile.txt
Here is some text. $var1 Here is some more. $var2
使用cat
cat txtfile.txt
打印
下面是一些文字。 $ var1這裏還有一些。 $ var2
我怎樣才能得到它來擴展$ var1和$ var2的輸出值?
使用bash,我試圖打印整個文本文件,包括文本文件中的變量值而不是文本文本($ var)。貓可以從文本文件內聯打印變量嗎? bash
txtfile.txt
Here is some text. $var1 Here is some more. $var2
使用cat
cat txtfile.txt
打印
下面是一些文字。 $ var1這裏還有一些。 $ var2
我怎樣才能得到它來擴展$ var1和$ var2的輸出值?
執行變量擴展的唯一方法是在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.
這樣做的一個更安全的方法是擴展你想允許的變量,你自己。這不會運行命令,使用shell替換例如來隱藏文件本身。$(chmod -R 777 ~ | true)
。
例如:$(sed -r -e "s/\\\$var1\\b/$var1/g" -e "s/\\\$var2\\b/$var2/g" < file.txt)
。您也可以使用perl
。
請注意,在此示例中,您必須在$var1
或$var2
本身內逃脫任何/
分隔符的實例。
這些變量來自哪裏? Arw那些Bash變量?還是環境變量? –
BinaryZebra指出我在答案中提出的錯誤,所以我將其刪除。因爲這個文件可能包含表達式'$(運行這個命令)',所以任何事情都會有安全問題。 – Davislor
你可以試試'echo -e「$(cat file)」' –