如何扩展从 ksh 脚本中的文件读取的字符串中的宏?

How to expand macros in strings read from a file in a ksh script?

我想读取存储在文件中的文件名列表,顶级目录是一个宏,因为这是针对在多个环境中可能 运行 的脚本。 例如,有一个文件 file_list.txt 包含以下完全限定的文件路径:

$TOP_DIR/subdir_a/subdir_b/file_1
$TOP_DIR/subdir_x/subdir_y/subdir_z/file_2 

在我的脚本中,我想 tar 文件,但为了做到这一点,tar 必须知道实际路径。 如何获取包含文件路径的字符串以展开宏以获取实际路径? 在下面的代码中,回显的字符串值与上面的文件中的完全相同。 我尝试使用 actual_file_path=`eval $file_path` 并且虽然 eval 确实 评估宏,但它 returns 是一个状态,而不是评估的路径。

for file_path in `cat $input_file_list`
do
    echo "$file_path"
done

我错误地使用了 eval。解决方法是在eval右边使用赋值,如下:

for file_path in `cat $input_file_list`
do
    eval myfile=$file_name
    echo "myfile = $myfile"
done

$myfile 现在有了宏的实际扩展。

带有标签 ksh 我认为你没有实用程序 envsubst
$input_file_list 中的变量个数非常有限时,可以将 vars 替换为 awk :

awk -v top_dir="${TOP_DIR}" '{ sub(/$TOP_DIR/, top_dir); print}' "${input_file_list}"