【问题标题】:How to insert a variable in a file name in bash?如何在bash的文件名中插入变量?
【发布时间】:2020-08-08 05:07:21
【问题描述】:

我目前正在学习 bash 并学习了一些基础知识。

现在我想要一个文件的变量名(例如“Backup_2020-04-24”)它不起作用。

我还应该提到我使用的是 MacOS 设备

它的样子:

variable = "test" tar -zcvf projects_${variable}.gzip testfolder

预期:名为 projects_test 的 gzip 文件位于名为 testfolder 的文件夹中。

gzip 是在测试文件夹中创建的,但是.. 名称是“projects_”。

有谁知道为什么会这样并且可以向我解释一下吗?回显时,变量不为空。

如果这篇文章格式不正确,请原谅,这是我在这里的第一篇文章。请不要犹豫,告诉我下次做什么做得更好

【问题讨论】:

    标签: bash macos shell scripting


    【解决方案1】:

    可能是variable = "test" 周围的空格。试试variable=test? (这确实应该是一个评论,但我还没有足够的代表发表评论)。

    或者,如果您希望 variable 采用的值是需要计算的:

    foo=$(date --date='@2147483647')
    echo $foo
    #> Mon Jan 18 19:14:07 PST 2038
    

    【讨论】:

    • 感谢您的快速回复!这确实有助于作为一个简单字符串的变量,但我的实际变量是这样的,一旦我删除“=”之后的空格,它就会说找不到命令。当我回显它时,我确实得到了日期,但是它没有显示在文件名中。:DATE= date -v -1d +%Y%m%d 它基本上返回昨天的日期
    • 所以设置DATE=$(date -v -1d...)
    • 这个想法是在变量名、等号和变量值之间不能有空格。
    • 你成就了我的一天!多谢!你能解释一下为什么会这样吗?我在哪里可以阅读更多关于此的信息?我承认我对 '$()' 部分有点困惑。
    • 老实说,我对 bash 的了解还不够,但是...$() 启动了一个我相信的新 shell,并运行任何命令,返回该命令的标准输出.所以当你有foo=$(...) 时,它会启动一个新的shell,运行这些东西,然后将foo 设置为返回的任何东西。
    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 2012-07-11
    • 2011-01-23
    • 2022-11-24
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多