【问题标题】:Command not found on bash function call [duplicate]在 bash 函数调用中找不到命令 [重复]
【发布时间】:2012-09-18 22:59:45
【问题描述】:

您好,我是 bash 脚本的新手,但不明白为什么当我尝试使用参数 20120920 5 将此函数调用的结果分配给局部变量时,会出现 command not found 错误。

    #!/bin/bash

function nDaysAgo () #date # daysago
{
 date -d "${1} - ${2} days" +%Y%m%d;
}

所以脚本名称是 ndaysago,我首先使用 . ndaysago,然后像这样分配值:

newdate= nDaysAgo 20120910 5

打印:20120905:找不到命令

意味着执行日期,但随后尝试将输出用作命令,这不是我所期望的。

我也尝试将新值分配给函数内的变量,如下所示:

#!/bin/bash

function nDaysAgo () #date # daysago
{
 var=$(date -d "${1} - ${2} days" +%Y%m%d)
}

还是什么都没有,mmmmmm

【问题讨论】:

  • 我无法重现您的错误!
  • 检查是否有其他问题!
  • 我假设你的原始代码实际上是newdate=nDaysAgo 20120910 5,因为= 后面的空格没有错误,你得到正确的值打印,并且没有任何内容newdate.
  • 这就是我现在尝试分配值的方式:newdate=$(nDaysAgo 20120910 5)
  • @lanzz 你是对的。 newdate=nDaysAgo 20120910 5 会出错,@dogbane 是正确答案!

标签: bash shell date


【解决方案1】:

分配变量时,= 周围不允许有空格。要调用一个函数,你应该使用$(...) 语法,它被称为command substitution

改为:

newdate=$(nDaysAgo 20120910 5)

【讨论】:

  • newdate=$(nDaysAgo 20120910 5) 20120905:找不到命令
  • 它对我有用。你删除空间了吗?完全使用我写的内容。
  • 之后你在和newdate 做点什么吗?它可能在其他地方失败了。
  • @JBoy 在这种情况下,您的 nDaysAgo 函数与您发布的两个变体不同。
  • @JBoy 看起来你已经把这个函数引入了你的shell。你能在你的shell中运行declare -f nDaysAgo并确认函数确实正确吗?
猜你喜欢
  • 2013-05-17
  • 1970-01-01
  • 2017-02-23
  • 2012-06-06
  • 2013-03-22
  • 2015-01-22
  • 2022-11-24
  • 2020-08-10
  • 2017-01-21
相关资源
最近更新 更多