说我有一个bash脚本文件config.sh。这意味着由其他脚本源代码,定义的变量被用作高级脚本的定制。
原文链接:https://www.f2er.com/bash/387766.html问题是,如果config.sh有一个临时变量,它的名称与上一级脚本的变量冲突,那么它会打破上级的变量。
config.sh:
TMP1=abc CONFIG_INPUT_DIR="$TMP1"/in CONFIG_OUTPUT_DIR="$TMP1"/out
上层脚本:
TMP1=def source config.sh echo $TMP1
最后一个回声打印abc,而不是def。
解决方案1
我目前的解决方案是将一个随机字符串附加到临时变量名称,使其几乎不可能发生冲突。例如:
TMP1_vFc9Uiew=abc CONFIG_INPUT_DIR="$TMP1_vFc9Uiew"/in CONFIG_OUTPUT_DIR="$TMP1_vFc9Uiew"/out unset TMP1_vFc9Uiew
这是痛苦的,使代码难以阅读,另外不完美。
解决方案2使用本地关键字
经过一番搜索,我来了解本地关键字。
但是当我简单地将TMP1声明为本地时,bash抱怨config.sh:line 1:local:只能在一个函数中使用。
function config_func_rZ0Yqkpm() { local TMP1=abc CONFIG_INPUT_DIR="$TMP1"/in CONFIG_OUTPUT_DIR="$TMP1"/out } config_func_rZ0Yqkpm unset config_func_rZ0Yqkpm
这比先前解决的可维护性和可读性更好,但是有一些冲突的可能性以及解决方案1。
题
我想知道更强大和智能的解决方案,没有任何冲突的可能性。
谢谢。