这个错误是啥意思? (SC2129:考虑使用 cmd1; cmd2; >> 文件而不是单独的重定向。)
Posted
技术标签:
【中文标题】这个错误是啥意思? (SC2129:考虑使用 cmd1; cmd2; >> 文件而不是单独的重定向。)【英文标题】:What does this error mean? (SC2129: Consider using cmd1; cmd2; >> file instead of individual redirects.)这个错误是什么意思? (SC2129:考虑使用 cmd1; cmd2; >> 文件而不是单独的重定向。) 【发布时间】:2015-07-23 13:07:27 【问题描述】:我正在编写一个脚本来为我的博客生成草稿。运行ShellCheck 后,我不断看到此错误弹出。这是什么意思,有人可以举个例子吗?
SC2129: Consider using cmd1; cmd2; >> file instead of individual redirects.
此外,我不确定我需要做什么才能将 $title
的值传递给帖子 YAML 中的 "Title"
字段...
#!/bin/bash
# Set some variables
var site_path=~/Documents/Blog
drafts_path=~/Documents/Blog/_drafts
title="$title"
# Create the filename
title=$("$title" | "awk print tolower($0)")
filename="$title.markdown"
file_path="$drafts_path/$filename"
echo "File path: $file_path"
# Create the file, Add metadata fields
echo "---" > "$file_path"
echo "title: \"$title\""
>> "$file_path"
echo "layout: post" >> "$file_path"
echo "tags: " >> "$file_path"
echo "---" >> "$file_path"
# Open the file in BBEdit
bbedit "$file_path"
exit 0
【问题讨论】:
echo 'foo'; echo 'bar'; echo 'baz'; >> file
而不是单独/重复的echo x >> file
【参考方案1】:
如果你点击shellcheck给出的消息,你会到达https://github.com/koalaman/shellcheck/wiki/SC2129
在那里您可以找到以下内容:
有问题的代码:
echo foo >> file date >> file cat stuff >> file
正确代码:
echo foo date cat stuff >> file
理由:
而不是在每一行之后添加 >> 的东西,你可以 只需将相关命令分组并重定向该组。
例外情况
这主要是风格问题,可以随意忽略。
所以基本上替换:
echo "---" > "$file_path"
echo "title: \"$title\""
>> "$file_path"
echo "layout: post" >> "$file_path"
echo "tags: " >> "$file_path"
echo "---" >> "$file_path"
与:
echo "---"
echo "title: \"$title\""
echo "layout: post"
echo "tags: "
echo "---"
> "$file_path"
尽管我建议你使用heredoc:
cat >"$file_path" <<EOL
---
title: "$title"
layout: post
tags:
---
EOL
【讨论】:
第一个版本多次打开和关闭文件。第二个只打开和关闭一次。没关系,但需要考虑。以上是关于这个错误是啥意思? (SC2129:考虑使用 cmd1; cmd2; >> 文件而不是单独的重定向。)的主要内容,如果未能解决你的问题,请参考以下文章
这个python openpyxl“ValueError”是啥意思?
报错String index out of range是啥意思?