【问题标题】:How to export variable which includes * (asterisk) sign in it?如何导出包含 *(星号)符号的变量?
【发布时间】:2018-11-30 06:35:35
【问题描述】:

我有一个要导出的 cron 作业环境变量。

    export CRON="30 * * * * *"

问题是 *(星号)将所有文件名都带入该文件夹中。最终出现错误。 要快速尝试并了解问题,请执行以下操作。

  1. 打开终端(我使用的是 Mac)
  2. export TEST="30 *"
  3. echo $TEST
  4. 检查输出

这里输出不会

30 *

这是

30and all your files in that folder.

PS:- 这个环境变量正在被一个应用程序读取,需要在某些函数中使用它。 例如:-

cron.schedule(CRON, function(){// some code handling})

【问题讨论】:

    标签: macos cron operating-system environment-variables system


    【解决方案1】:

    您的导出命令没问题,不会导致星号被扩展。问题是你的echo $TEST。 POSIX shell 的规则导致$TEST 的扩展发生在全局扩展之前。所以你正在做的实际上是这样的:

    echo 30 *
    

    如果你引用扩展来抑制全局扩展,你会看到你所期望的:

    echo "$TEST"
    

    您的问题是 POSIX 1003 shell 行为糟糕的一个很好的例子。而像鱼和精灵这样的许多新的、创新的贝壳并没有实现这种行为。

    【讨论】:

    • 双引号变量引用在 Posix shell 中(几乎)总是一个好主意。 shellcheck.net 擅长指出此类常见错误。
    • @kurtis-rader 我已经更新了情况,因为我不能使用双引号。
    • 信息不足。您修改后的问题仍然没有解释为什么您不能引用该变量。如果使用 var 的“应用程序”是一个 shell 脚本,那么如果它不希望该值经历全局(即文件名)扩展,那么该脚本有责任引用它使用的任何变量。如果它是二进制程序(例如,从 C 源代码编译),则不会发生扩展。换句话说,您没有清楚地描述问题。
    • @KurtisRader 谢谢其实这是我的错双引号对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2017-06-06
    • 1970-01-01
    • 2014-08-07
    • 2021-12-28
    相关资源
    最近更新 更多