我在文件夾中有一些文件,其內容是每個文件中的4位數字。我怎樣才能用bash中的循環導出變量name=filename
及其value=filecontent
?如何聲明變量名稱等於目錄中的文件名,變量值等於文件內容?
0
A
回答
4
這很簡單。
#!/bin/bash
dir="."
for file in "$dir"/*
do
[[ -f "$file" ]] || continue
var="${file##*/}"
if
printf -v "$var" "$(<"$file")" 2>/dev/null
then
export "$var"
else
echo "Invalid filename: $file"
fi
done
並非所有的文件名都是有效的變量名稱。您需要100%確定所有可以使用腳本的文件都具有有效的變量名稱,或者(最好)執行某種測試或錯誤處理。上面的腳本將檢測到一個失敗的任務,但除了抱怨之外不會做任何聰明的事情。
一些解釋...
如果文件不是常規文件中的循環體被跳過(即目錄,特殊文件被跳過)。
代碼使用-v
選項printf
,這會導致printf
分配的名稱被提供,而不是打印到標準輸出。這比安全地使用eval
更安全,這會打開代碼注入的可能性,尤其是考慮到您使用的是腳本無法控制的文件名。
"$(<"$file")"
語句是一個命令替換,輸出文件的內容,就像產生字符串而不是流的重定向一樣。
最後,請注意,如果你想爲export
變量準備其他事情,你的腳本會做,你很好。但是,如果要將這些變量導出到調用腳本的shell中,則需要使用.
(或source
)執行腳本,因爲子進程無法將變量導出(或進行任何類型的賦值)其父母。 Sourcing使shell從指定的文件中讀取命令,而無需啓動子進程。
相關問題
- 1. 類等於變量名
- 2. 如何選擇名稱等於變量值的屬性?
- 3. 如何使用名稱等於內部變量
- 4. 保存新的plist文件,其文件名等於字符串變量的值
- 5. 如何找到聲明名稱空間變量的文件?
- 6. 聲明變量等於工作表名稱,以引用表中的表格
- 7. JavaScript變量等於JSON數據文件
- 8. Javascript變量等於文本框的值
- 9. 你能設置一個變量名稱等於另一個變量的值嗎?
- 10. 如何str_replace變量$名稱到文件
- 11. 基於文件名的變量
- 12. 名稱不明的變量聲明
- 13. 如何讓變量的值等於JavaScript中文本字段的內容?
- 14. 如何檢查文件是否等於python中的變量?
- 15. 設置變量等於在一個文本文件批量
- 16. 聲明變量文件
- 17. 使用父文件夾/目錄名稱作爲變量重命名文件
- 18. 關於變量名稱
- 19. VBA公式:變量文件名和變量表名稱
- 20. 查找變量的聲明名稱
- 21. 如何聲明一個變量,它等於在JavaScript
- 22. 從文件中提取變量名稱
- 23. 基於excel中的變量文件名VBA打開文件
- 24. 區分變量等於0和變量等於空陣列['列']
- 25. 如果變量等於else
- 26. 如何等於xsl中的變量?
- 27. 值是變量名稱而不是變量的內容
- 28. GNU Makefile默認值變量名稱中包含目標文件
- 29. 「如果變量等於變量回聲這個」造成白屏
- 30. 書寫變量的內容到變量文件可變目錄內
值得一提的是,從腳本中導出不會影響父shell。如果這是OP的目標。 (源於父母的結果是可能的) –
@ DavidC.Rankin好點,會相應更新。 – Fred
使用此代碼拋出錯誤爲無效文件名:c:/ mydir/a其中說「a」是文件名 – Harsh