如何扩展从 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}"
我想读取存储在文件中的文件名列表,顶级目录是一个宏,因为这是针对在多个环境中可能 运行 的脚本。 例如,有一个文件 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}"