2

嗨,我想做以下事情。

./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 循环中使用它们,在其中我将对输入文件做一些事情并将输出保存在这些临时文件中以供以后使用。所以基本上我想根据我的输入文件的名称创建变量名。

我用谷歌搜索了很多,没有找到任何问题的答案。

我要感谢您的建议

4

4 回答 4

1

我会建议使用替代解决方案,而不是输入您提议的变量命名地狱(稍后使用变量会导致您以后遇到同样的问题,规模只会被放大)。

使用关联数组(如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]}

注意:关联数组需要bash4.0.0 或更高版本。

如果您没有 Bash 4.0.0 或更高版本,请参阅以下答案以了解不使用eval.

于 2013-07-11T10:39:16.457 回答
0

尝试这个:

eval "tempfile_"$1"=$(mktemp)"
eval "tempfile_"$2"=$(mktemp)"
于 2013-07-11T10:28:34.813 回答
0

你不能这样做,因为 Bash 只是不允许在标识符/变量的名称中使用点。您的两个参数$1$2包含点(句点),并且不能用于您尝试创建的变量名,即tempfile_$1

有关详细信息,请参阅此页面

于 2013-07-11T10:32:11.037 回答
0

使用类似的东西:

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

查看如何在 bash 中定义哈希表?

于 2013-07-11T10:33:46.167 回答