BASH创建文件名的表单变量

18 浏览
0 Comments

BASH创建文件名的表单变量

我想为重定向输出创建一个文件名。

例如:

ls -lash > $filename

所有变量都已设置...

到目前为止,我尝试了以下几种方法:

filename=`echo $site . "_location_" . $address . "_" .  $timestamp . ".txt"` 
filename=$site . "_location_" . $address . "_" .  $timestamp . ".txt" 
filename="$site_location_$address_$timestamp.txt" 

这些都没有起作用... 我该如何得到一个文件名,像这样:

site1_location_northeast_071218142325.txt

谢谢

0
0 Comments

原因:在Bash中,为了告诉Bash要替换变量$site和$address的值,需要使用大括号将变量名括起来。否则,由于下划线是变量名中的有效字符,Bash会认为你要使用变量$site_location_和$address_(实际上这两个变量并不存在)。

解决方法:使用大括号将变量名括起来,即可解决该问题。

以下是一个示例代码:

filename="${site}_location_${address}_${timestamp}.txt"

在这个代码中,我们使用了大括号来包裹变量$site和$address,以确保Bash正确识别这两个变量并替换它们的值。这样就能够正确生成文件名了。

感谢以上两位评论者提供的帮助,这个解释稍微详细了一些。

0
0 Comments

问题的出现原因是在创建文件名时,变量中的下划线字符(_)被错误地解释为参数名称的一部分,导致文件名格式错误。解决方法是使用字符串插值并使用大括号将变量括起来,这样可以确保下划线字符被正确地解释为文件名的一部分。

具体的解决方法如下所示:

filename="${site}_location_${address}_${timestamp}.txt"

在这个解决方法中,通过在变量名的前后添加大括号,将变量的内容与其他字符串拼接起来,确保下划线字符被正确地解释为文件名的一部分。这样,最终生成的文件名就不会因为下划线字符而出现错误。

0