【发布时间】:2017-04-05 09:59:43
【问题描述】:
很抱歉subject clone,但鉴于我从该答案中成功使用的技术在新脚本上无法按预期工作,我认为是时候提出一个新问题了。
无论如何,以下脚本相当简单:
missed_symbols=()
grep missed ${dest}/scribe.log | while read -r line; do
symbol=$(echo "${line}" | cut -d' ' -f1)
missed_symbols+=("$symbol")
done
grep missed ${dest}/scribe_close.log | while read -r line; do
symbol=$(echo "${line}" | cut -d' ' -f1)
missed_symbols+=("$symbol")
done
for symbol in "${missed_symbols[@]}"; do
echo "Scribe missed a turn in ${symbol}"
done
echo "Scribe missed ${#missed_symbols[@]} turns today"
exit 0
将-x 添加到#!/bin/bash 行告诉我,实际上,它将每个$line 的第一个单词从$missed_symbols[@] 分配给$symbol。然而,当我检查${#missed_symbols[@]} 时,我得到了零。当然,循环它不会产生任何输出。
那么,我的错字在哪里?
【问题讨论】:
-
提示:shellcheck 自动识别许多常见问题like this
-
顺便说一句——在这里使用
cut是不好的形式;我真的应该更早地在我的回答中纠正这一点,而不是保留它。请参阅 BashFAQ #100 了解有关 bash 中字符串操作的良好做法的一般讨论,或参阅 the bash-hackers page on parameter expansion 了解我更新后的答案现在使用的具体方法的深入讨论。 -
我写的东西几乎总是超级简单,所以我将大量使用 ShellCheck。
-
谢谢你,查尔斯,你的回答和澄清,即使这是一个骗局。有人给你解决问题所需的代码总是很好的,尽管答案在其他地方以另一种形式出现。