【问题标题】:Bash: Combine creating a file and storing the Path in a variableBash:结合创建文件并将路径存储在变量中
【发布时间】:2021-05-01 18:22:48
【问题描述】:

有没有办法创建文件并将路径存储到 Bash 中的变量中?

ENV_FILE=./.projects.env
echo > $ENV_FILE

如何在一个命令中实现这一点?

编辑:

根据以下 cmets 中的建议,可以这样做:

ENV_FILE=$(> ./.projects.env && echo './.projects.env')

【问题讨论】:

  • 你正在做的是截断文件; ENV_FILE 已经包含文件的路径,您的意思是 echo "$ENV_FILE"
  • 嗨,我的意思是,./.projects.env 是一个空的(大部分时间)不存在的文件,我想创建它或清空内容并稍后在脚本中使用文件路径。不知道有没有一个命令,把这两个步骤简化为一个
  • 只是> "$ENV_FILE" 会在该路径产生一个空文件,但您的命令也应该有效。你遇到过问题吗?
  • 哦,我明白了,“一个命令”。
  • 老实说,我发现这两行更加清晰,并且没有看到使用单行的任何优势。

标签: bash shell file path


【解决方案1】:

如果ENV_FILE 尚未设置,您可以使用:

echo > "${ENV_FILE:=./.projects.env}"

注意:如果ENV_FILE 已经设置为非空值,这将使其保持不变并使用其现有值。来自bash man page 的参数扩展部分:

${parameter:=word}

分配默认值。如果parameter 未设置或为空,则word 的扩展分配给parameter。的价值 parameter 然后被替换。位置参数和特殊 不能以这种方式分配参数。

顺便说一句,以这种方式使用echo 不会完全擦除文件,它会用换行符替换其内容(本质上是一个空行)。对于一个真正的空文件,不要使用任何命令:

> "${ENV_FILE:=./.projects.env}"

【讨论】:

  • 谢谢你,戈登,这个答案是正确的。
【解决方案2】:

你可以试试

FILE_NAME=<a file name>
ENV_FILE=$(touch "$FILE_NAME" && realpath "$FILE_NAME")

&lt;a file name&gt; 替换为您要提供的名称。

【讨论】:

  • 您需要提前将文件名存储在某个地方,对吧? 编辑:或者必须有人提供它
  • 我的意思是,realpath 可以解决,它将我的代码简化为单行代码
  • 好的,谢谢,我用echo代替了realpath
【解决方案3】:

如果您不想重复文件名(并消除潜在的拼写错误),您可以这样做...

ENV_FILE=$(> ./.projects.env && echo !$)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    相关资源
    最近更新 更多