从shell脚本创建文件(例如,这是标题)

时间:2015-06-24 17:47:22

标签: bash shell

我正在尝试使用以下脚本创建文件(请参阅下文)。虽然脚本运行没有错误(至少根据shellcheck),但是我无法使得到的文件具有正确的名称。

fs.appendFileSync

bash很新,所以我不太确定我做错了什么......

1 个答案:

答案 0 :(得分:1)

最明显的错误是:

title=$("$title" | "awk {print tolower($0)}")

出于以下几个原因,这是错误的:

  • 此管道将"$title"作为命令运行 - 这意味着它会查找以您要运行的博客文章标题命名的命令 - 并管理该命令的输出(可能赢得的命令&#39) ; t存在)到awk
  • 在整个awk命令周围使用双引号意味着您正在查找名为/usr/bin/awk {print tolower(bash-)}的命令(如果$0评估为bash-,它将在交互式解释器;行为在其他地方会有所不同)。
  • 使用双引号而不是单引号来保护您的awk脚本意味着$0会被评估到shell而不是awk。

更好的替代方案可能如下:

title=$(awk '{print tolower($0)}' <<<"$title")

...或者,使用更简单的工具:

title=$(tr '[:upper:]' '[:lower:]' <<<"$title")

...或者,使用bash 4.x内置功能:

title=${title,,}

当然,所有假设title都设置为开头。如果您没有在环境中传递它,那么您的脚本可能需要title=$1而不是title="$title"