比方说,我有一堆年初设定的常量,我按字母顺序排列为更好地了解一个脚本:bash的变量向前声明
declare -r home_folder=/home/
declare -r user_folder=$home_folder$user_name/
declare -r user_name=$USER
显然,第二行的评价不会给因为bash只进行一次评估,因此稍后调用$user_folder
仍然会给出/home/
。有什么办法可以解决这个问题吗?
编辑:首选的解决方案看起来像
declare -r home_folder=/home/
declare -r user_folder=$home_folder$pointer-to-user_name/
declare -r user_name=$USER
与时user_folder
评估被评估的指针,但我不知道是否有可能这在bash。
ALPHABETICALLY ????如何在语义上对它们进行排序,那么可能你的问题本身就会消失。 (按字母顺序... *不相信的摇头*)请不要感到难过。我的建议:尝试按照它们“出现”的顺序排列,然后这个问题就消失了。按字母顺序排列没有足够的优势(如果你问我)没有足够的优势来证明这一点。 – Alfe
Shell脚本是表达行为的迭代方式,执行顺序不是基于依赖关系的。你想要达到的目标要么是读完所有可能的任务,要么只执行满足依赖关系的任务,直到完成所有任务或剩下的所有任务都有未满足的依赖关系,或者构建某种依赖关系树并遵循它。你可以构建它,或者更可能的是,根据它们的语义来决定顺序赋值是否合理,并有助于避免循环依赖,尤其是使用'set -u'时。 – Fred
除了命令的名称之外,shell中没有实际的变量声明。 'declare -r user_name'只设置*名称*上的一个属性;除非实际为其分配值,否则'user_name'仍未定义。 (OK,'-r'就是一个不好的例子,因为未能分配给一个你认为只读的名字会有效地阻止你通过这个名字定义一个变量。) – chepner