我想读取存储在文件中的文件名列表,而顶层目录是一个宏,因为这是用于可能在多个环境中运行的脚本。例如,有一个文件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确实评估宏,它返回一个状态,而不是评估的路径。
for file_path in `cat $input_file_list`
do
echo "$file_path"
done
标签ksh
我认为你没有实用程序envsubst
.
当$input_file_list
中的变量数量非常有限时,你可以用awk
代替变量:
awk -v top_dir="${TOP_DIR}" '{ sub(/$TOP_DIR/, top_dir); print}' "${input_file_list}"
我错误地使用了eval。解决方案是在eval的右侧使用如下赋值:
for file_path in `cat $input_file_list`
do
eval myfile=$file_name
echo "myfile = $myfile"
done
$myfile现在有了宏的实际扩展。