【问题标题】:Using a variable as a file name and writing to the file in bash使用变量作为文件名并在 bash 中写入文件
【发布时间】:2014-04-17 04:25:31
【问题描述】:

所以我试图写入一个文件,我希望我的文件名是我打开它的时间。我有这样的事情:

var=$(date +"%D-%H:%M:%S")
echo "I opened a file" > $var
cat $var

当我尝试运行这段代码时,它给了我错误:

 NO SUCH FILE OR DIRECTORY

谁能告诉我这是怎么回事?

【问题讨论】:

    标签: bash file variables unix


    【解决方案1】:

    你应该在你的变量中使用引号:

    var="$(date +"%d-%m-%Y-%H:%M:%S")"
    echo "I opened a file" > "$var"
    cat "$var"
    

    编辑:您的问题是在您的日期变量中使用斜杠 / 使 shell 认为它是路径而不是文件名。您需要按照我上面的建议更改日期格式。

    【讨论】:

    • 是的。我得到了它!谢谢!
    • 另外,如果你要经常这样做,你可能会通过使用exec 3> "${var}"; ... echo "something" >&3来获得一些效率...这将在你的日志中节省很多打开/附加/关闭周期文件只打开一次,然后重复写入适当的文件描述符。但是,根据您的用例,可能没有必要......
    【解决方案2】:

    那是因为您的重定向是到文件名“:”,而文件名的其余部分被单词拆分为以下参数。 Use more quotes.

    另一个问题是您无法创建包含斜杠的文件名。当然,这是一个目录结构。您将需要用其他东西替换斜线。您可以通过修改date 命令来做到这一点,但使用parameter expansion 也很容易,如下所示:

    var=$(date +"%D-%H:%M:%S")
    $ echo "$var"
    03/12/14-15:20:46
    $ echo 'data' > "${var//\//_}" # replace slashes with underscores
    

    如果您只是想创建带日期戳的文件,请考虑使用epoch timestamp

    var=$(date +%s)
    echo "$somedata" > "$var"
    

    机器很容易将值与纪元时间戳相互转换,而且对于您和大多数用户来说,处理由数字字符串组成的文件名比处理人类可读的时间戳更容易。

    【讨论】:

    • 您能否详细说明...我不确定您的意思...谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-04-12
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2013-01-28
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多