我的脚本中有一个循环,它会将一个电子邮件地址列表附加到文件“$ CRN”。如果再次执行此脚本,它将附加到此旧列表。我希望它用新列表覆盖,而不是附加到旧列表。如果需要,我可以提交我的整个脚本。我知道我可以测试“$ CRN”是否存在然后删除文件,但我对其他一些建议感兴趣?感谢。
for arg in "$@"; do
if ls /students | grep -q "$arg"; then
echo "${arg}@mail.ccsf.edu">>$CRN
((students++))
elif ls /users | grep -q "$arg$"; then
echo "${arg}@ccsf.edu">>$CRN
((faculty++))
fi
答案 0 :(得分:2)
最好这样做:
CRN="/path/to/file"
:> "$CRN"
for arg; do
if printf '%s\n' /students/* | grep -q "$arg"; then
echo "${arg}@mail.ccsf.edu" >> "$CRN"
((students++))
elif printf '%s\n'/users/* | grep -q "${arg}$"; then
echo "${arg}@ccsf.edu" >> "$CRN"
((faculty++))
fi
done
ls
输出!请改用bash glob
。 ls
是用于交互式查看文件信息的工具。它的输出格式化为人类,并将导致脚本中的错误。使用globs或代替。了解原因:http://mywiki.wooledge.org/ParsingLs arg=foo
和glob
:foobar
相关的误报。如果您想要字边界,则需要grep -qw
。 UP2U