Bash
如何將變數及其值輸出到文件中
我在這個任務上有點掙扎,例如我可以做一個簡單的循環來將變數值發送到帶有 for 循環的文件中。但是如何在輸出變數值之前得到一些東西呢?我做了這樣的事情作為解決方法:
list="$1\n$2\n$3" varNames=$'var1=\nvar2=\nvar3=' for i in $varNames $list; do echo -e $varNames$list > "vars-$(date +%Y-%m-%d_%H.%M).file" done
但是我無法正確地循環遍歷兩個列表中的每個項目,但是我得到的輸出是:
var1= var2= var3=$1 $2 $3
如上 $ 1, $ 2,$3 是我之前創建的變數的正確值。我在這個循環中缺少什麼?這是創建兩個列表的好方法,還是可以由一些 sed 之後處理?
謝謝!
幾乎與腳本中的行一樣多的問題,我嘗試一個一個地完成,在每一步都假設其他一切都按預期工作。
list="$1\n$2\n$3"
這不起作用,因為
\n
不會被換行符替換,你需要這樣的東西:list="$1"$'\n'"$2"$'\n'"$3"
或者
list="$1 $2 $3"
for i in $varNames $list; do
假設您修復了 (1),則此循環將執行 6 次(免責聲明,請參見本文的最後一句)。每個
$varNames
and一次$list
,我認為這不是有意的。此外,當你像這樣循環時,變數不會被換行符分割,而是被$IFS
. 它預設為換行符、空格或製表符。所以它可以工作,但知道這一點,你也可以list="$1 $2 $3"
在 (1) 中使用。當然,這只有在您知道這些變數中的每一個都不包含任何換行符、空格或製表符的情況下才有效。echo -e $varNames$list
輸出整個變數,而不僅僅是
$i
.您為每次迭代覆蓋整個文件。更好的使用
for ...; do ... done > file
所以現在怎麼辦?
我認為你不能輕易地修復你的程式碼。相反,您應該使用 bash 數組並遍歷鍵:
#!/bin/bash list=("$1" "$2" "$3") varNames=("var1" "var2" "var3") for k in "${!varNames[@]}"; do printf '%s=%s\n' "${varNames[$k]}" "${list[$k]}" done > "vars-$(date +%Y-%m-%d_%H.%M).file"
我更喜歡使用
printf
(見這個echo
),但如果你不在乎,你也可以像這樣使用……echo "${varNames[$k]}=${list[$k]}"