[英]Linux Bash Scripting: Declare var name from user or file input
嗨,我想做以下事情。
./script.sh some.file.name.dat another.file.dat
Filename1=$(echo "$1"|cut -d '.' -f 1,2)
Filename2=$(echo "$2"|cut -d '.' -f 1,2)
tempfile_"$1"=$(mktemp)
tempfile_"$2"=$(mktemp)
我知道此代碼無法正常工作。 我需要創建這些臨時文件,並在稍后的for循環中使用它們,在該循環中,我將對輸入文件進行處理,並將輸出保存在這些臨時文件中,以備后用。 所以基本上我想根據我的輸入文件的名稱來創建變量名。
我在Google上搜索了很多,但沒有找到解決我問題的任何答案。
我要感謝你的建議
我將建議使用一種替代解決方案,而不是輸入您要提出的變量命名方式 (以后使用變量會在以后引起相同的問題,比例會被放大)。
使用關聯數組 (例如tempfile[$filename]
)而不是tempfile_"$filename"
。 這就是關聯數組的用途:
declare -A tempfile
tempfile[$1]=$(mktemp)
tempfile[$2]=$(mktemp)
cat ${tempfile[$1]}
cat ${tempfile[$2]}
rm -f ${tempfile[$1]}
rm -f ${tempfile[$2]}
注意: 關聯數組需要bash
4.0.0或更高版本。
如果您沒有Bash 4.0.0或更高版本,請參見以下答案,以獲取不使用eval
出色解決方法。
嘗試這個:
eval "tempfile_"$1"=$(mktemp)"
eval "tempfile_"$2"=$(mktemp)"
您不能這樣做,因為Bash不允許在標識符/變量名稱中加點。 參數$1
和$2
都包含點(句點),並且不能在您要創建的變量名中使用,即tempfile_$1
有關詳情,請參見此頁面 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.