2011-05-11 92 views
4

我可以重定向輸出,然後貓文件和grep/awk的變量,但我想用這個文件的多個變量。如何使用bash將變量存儲在文件中?

所以如果它是一個變量表示狀態的話,我可以做一些事情像

echo "STATUS $STATUS" >> variable.file 
#later perhaps in a remote shell where varible.file was copied 
NEW_VAR=`cat variable.file | awk print '{$2}'` 

我想用SED一些行內編輯會有所幫助。代碼越小越好。存儲在文件中變量的

回答

8

declare內置的是這裏

for var in STATUS FOO BAR; do 
    declare -p $var | cut -d ' ' -f 3- >> filename 
done 

由於Brian says有用的,以後你可以source filename

declare是偉大的,因爲它處理引用您:

$ FOO='"I'"'"'m here," she said.' 
$ declare -p FOO 
declare -- FOO="\"I'm here,\" she said." 
$ declare -p FOO | cut -d " " -f 3- 
FOO="\"I'm here,\" she said." 
+0

啊,很好。我不知道'declare -p'。看起來這不是標準的,但如果你限制自己Bash和zsh的話就可以工作。如果你打算把它送到Bash,你可能不需要使用'cut'去掉'declare'; 'declare -p'打印的'declare'語句應該可以設置變量。 – 2011-05-11 17:33:12

+0

多數民衆贊成酷,但如何在地球上你會更新文件中的變量?再次讀寫所有內容? :/ – Blauhirn 2016-03-20 22:18:51

6

一種常見的方法是隻存儲NAME=value文件中的行,然後只需來源,到外殼要拿起變量。

echo 'STATUS="'"$STATUS"'"' >> variable.file 
# later 
. variable.file 

在bash中,你也可以使用source代替.,雖然這可能無法移植到其他炮彈。請仔細注意獲取文件中打印的正確雙引號所需的引號的確切順序。

如果你想要把多個變量一次到該文件,你可以做到以下幾點。抱歉,這需要做適當和便攜的引用扭曲;如果你限制自己的Bash,你可以用$"",使報價更簡單一點:

for var in STATUS FOO BAR 
do 
    echo "$var="'"'"$(eval echo '$'"$var")"'"' 
done >> variable.file 
+0

'VAR = value'格式已經無法移植到其他炮彈。 – Amadan 2011-05-11 14:31:48

+5

@Amadan它可以移植到任何符合POSIX標準的shell; Bash,dash,ksh,zsh等 – 2011-05-11 14:40:55

+0

確實。但不是'csh','tcsh'。 – Amadan 2011-05-11 15:01:47

相關問題