簡體   English   中英

Linux Bash腳本:從用戶或文件輸入聲明變量名

[英]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

有關詳情,請參見此頁面

使用類似:

f1=`echo $1|tr '.' '_'`
declare "tempfile_$f1=$(mktemp)"

看看如何在bash中定義哈希表?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM