for f in "$@"
do
echo # I'd like to skip this the first time
echo $f
print_info_about $f
done
bash 脚本的这个片段接受一些文件名并打印每个文件名和一些关于它的信息,它们之间有一个空行。
避免不必要的初始空白行的干净方法是什么?
等效地,echo
除了最后一次之外,每次迭代之后的干净方法是什么?
比拆分第一个(或最后一个)项目$@
并使用额外的print_info_about
.
理想情况下,就像 Ruby 将所有内容累积到一个字符串数组中一样干净,然后.join("\n")
.
separator=''
for f
do
printf "$separator"
separator='\n'
echo "$f"
print_info_about "$f"
done
这将separator='\n'
在第 2 次迭代和以后的迭代中徒劳无功。但是赋值是在 shell 内部进行的,因此速度很快,所以性能应该不会受到影响。
这个问题被标记了,bash
所以我修正了你的引用(未引用的变量在 中表现良好zsh
)。鞋底for f
相当于for f in "$@"
。
请注意,上述解决方案不是“仅在第一次迭代后才做某事”的通用方法。它是为您的特定“东西”量身定制的(打印一个空行作为分隔符)。
以下通用方法检查变量是否为空并do_something
有条件地任意运行。
marker=''
for f
do
if [ "$marker" ]; then
do_something
fi
marker=whatever
print_info_about "$f"
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句