【问题标题】:Linux use ".." to go one directory up while setting environ variables [closed]Linux在设置环境变量时使用“..”向上一个目录[关闭]
【发布时间】:2021-02-01 23:55:53
【问题描述】:
$ls /usr/local
bin etc games include lib man sbin share src

例如,我有一个环境变量

export temp=/usr/local/sbin

我想使用temp 设置不同的环境变量,方法是上一层并将其设置为bin

我试过export temp2=$temp:/../bin

echo $temp2

我看到了输出

/usr/local/sbin:/../bin

预期输出

/usr/local/bin

【问题讨论】:

  • temp=/usr/local/sbin/../bin?为什么: 在中间?
  • 我们可以为您提供 1000 种可能导致此方法不起作用的不同原因,但为了真正帮助您,我们希望您告诉使用您认为这应该起作用的原因。你的推理是什么。只有这样我们才能帮助您并详细解释为什么上述方法不起作用。
  • @SuryaTej:假设 /usr/local 是指向 /foo/bar 的符号链接,那么你会期待 /foo/bar/bin 还是 /usr/local/bin
  • 请描述问题,而不仅仅是您尝试的解决方案。见xyproblem.info
  • @KurtisRader 我在问题中尝试/提到的解决方案是我的确切情况,除了在实际问题中我应该使用的环境变量受版权保护

标签: bash ubuntu environment-variables


【解决方案1】:

使用bash 替换:

temp2="${temp/\/sbin//bin}"
# or else
# temp2="${temp%/sbin}/bin"
echo "$temp2"
/usr/local/bin

或者,如果您不知道路径的最后一部分,请按照@Lucas 的建议使用:

temp2=${temp%/*}/bin

【讨论】:

  • 如果我们不确切知道最后一个组件,我们可以匹配这样的任何东西:temp2=${temp%/*}/bin
【解决方案2】:

我不明白你为什么对它不起作用感到惊讶;等号后面的东西只是一个字符串。

你可以做的是使用parameter expansion:

bash$ temp2=${temp%/sbin}/bin

(除非您特别要求此变量可用于子进程,否则无需export。)

如果你很懒,你可以使用 ../bin:

bash$ temp2=$temp/../bin

但同样,这只是一个字符串,如果您将其用作路径名,最终会解析为 /usr/local/bin

【讨论】:

  • 参数扩展有效,我想看看..是否像windows一样工作。 bash$ temp2=$temp/../bin 也不起作用。请仔细检查,我会接受你的回答
  • “没用”是什么意思?它将/usr/local/sbin/../bin 分配给temp2,如果你例如,它将解析为/usr/local/bincd "$temp2"
  • 明白了,我只是尝试打印变量而不是 cd。我的坏
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2011-09-03
相关资源
最近更新 更多