如何在 Bash 脚本中定义和使用全局文件名

如何在 Bash 脚本中定义和使用全局文件名

编辑:改变了动态计算变量名的要求,因为我的用例并不严格需要这个,并且提供了一个适合我的解决方案。

这可能无法做到,但可以这样做:

我有一个 bash 脚本,它对输入文件(即 ASCII xyz(纬度、经度、深度)三元组)进行一些格式化和文件类型转换,并创建各种输出文件类型。我试图避免每次编写类似这样的脚本时都要处理输出文件名;我想我正在尝试找到一种计算输出文件名的方法全球在我的系统上给出任何输入文件名,可以通过export在 bashrc 中添加“输出文件名后缀”或者在我的脚本中获取的其他文件中添加。

例如,在典型的脚本中,我会根据命令行给出的输入文件动态构建输出文件名:


INPUT=$1

INPUT_SUFFIX=`echo $INPUT | cut -d. -f2`
INPUT_BASE=$(basename $INPUT .$INPUT_SUFFIX)
OUTPUT_TEXT="${INPUT_BASE}txt"
OUTPUT_TIFF="${INPUT_BASE}tif"
OUTPUT_GRID="${INPUT_BASE}grd"

#...etc, plus other output formats

我正在尝试找到一种方法来避免在每个脚本中都进行这些繁琐的输出文件名定义。我知道每次我都可以简单地复制和粘贴代码,但定义一次输出文件名的构造方式并在整个系统中全局定义输出文件名会更有效。

因此任何我编写的脚本,对于任何值$1,像$OUTPUT_TIFF已经根据输入动态计算,结果为“${1}.tif”。

答案1

一个简单的方法干燥就是将通用代码写入常规文件,并在每次需要时执行此操作。在 Bash 中你甚至可以传递参数。但这是“按需”的,而不是“动态计算”的;也就是说,如果$1由于某种原因而发生变化,那么您将需要再次获取源代码来更新变量。

相关内容