【问题标题】:What does `[[ -e ~/.profile ]] ` mean in zsh shell?`[[ -e ~/.profile ]] `在zsh shell中是什么意思?
【发布时间】:2016-12-22 06:37:57
【问题描述】:

我想让 zsh 在登录时加载 ~/.profile。我发现了这个zsh-not-hitting-profile

Gilles 的回答在 ~/.zprofle 中添加了 emulate sh -c '. ~/.profile' 确实有效。

但我想知道为什么 Frank Terbeck 会添加它:

[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'

我对linux shell不是很熟悉所以听不懂他说什么:

而且它只在源期间有效。因此,您不必保存当前选项状态以便在采购后再次重播。

  1. 仅在源期间有效?我需要 ~/.profile 始终需要是 source ,我无法理解其含义,因为 emulate sh -c 'source ~/.profile 每次登录时都可以正常工作。
  2. 保存当前选项状态以便重播?什么是选项状态,为什么我需要重播?

【问题讨论】:

    标签: bash shell sh zsh .bash-profile


    【解决方案1】:

    [[ -e ~/.profile ]] 只是测试文件~/.profile 是否存在。这样,如果文件不存在,source ~/.profile 就不会出错。

    “仅在源期间活动”表示您为emulate 命令提供的-c 选项不会将选项更改为原始shell 进程。它只是在模拟source 命令期间临时使用它。

    【讨论】:

    • 谢谢,通过搜索bash check file exist我了解-e ~/.profile的用法,stackoverflow.com/questions/13542832/…告诉我双方括号是什么意思。
    • 原始 Bourne shell 有一个非常有限的外部实用程序,称为 [ aka test;随后的 shell(主要)选择了类似的“语法外观”但不同的结构来引入新的内置功能,以保持向后兼容性但引入新的行为。
    • @tripleee 这在他链接到的问题中有解释。
    • 嗯?我在那里没有看到对这种语法的解释。 (尽管他也在那里发表了相同的评论;被标记为太健谈。)
    • @tripleee 上面的答案说 Double [[]] 是标准 [] 的扩展,并且受到 bash 和其他 shell 的支持
    猜你喜欢
    • 2020-05-08
    • 2010-11-06
    • 2020-03-03
    • 2015-09-21
    • 2010-09-09
    • 1970-01-01
    • 2012-05-06
    相关资源
    最近更新 更多