Linux Bash脚本:从用户或文件input中声明var名称

嗨,我想做以下事情。

./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) 

我知道这个代码不起作用。 我需要创build这些临时文件,然后在for循环中使用它们,其中我将对input文件执行一些操作,并将输出保存在这些临时文件中供以后使用。 所以基本上我想创build依赖于我的input文件的名称的variables名称。

我GOOGLE了很多,没有find任何答案我的问题。

我想感谢您的build议

Solutions Collecting From Web of "Linux Bash脚本:从用户或文件input中声明var名称"

你不能这样做,因为Bash不允许标识符/变量名称中的小点。 你的参数$1$2都有点(句点),并且不能用于你要创建的变量名称,例如tempfile_$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]} 

注: 关联数组需要bash版本4.0.0或更新。

如果您没有Bash版本4.0.0或更新版本,请参阅以下答案,了解不使用eval很好的解决方法。

  • 如何在Bash中定义哈希表?
  • Shell脚本中的关联数组

尝试这个:

 eval "tempfile_"$1"=$(mktemp)" eval "tempfile_"$2"=$(mktemp)" 

使用类似于:

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

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