我有一个 bash 脚本,我想遍历 stdin 中的行,或者遍历传入的每个参数。
有没有一种干净的方法来写这个,所以我不必有 2 个循环?
#!/bin/bash
# if we have command line args...
if [ -t 0 ]
then
# loop over arguments
for arg in "$@"
do
# process each argument
done
else
# loop over lines from stdin
while IFS= read -r line; do
# process each line
done
fi
编辑:我正在寻找一个只使用单个循环的通用解决方案,因为我发现我想经常这样做,但总是写出 2 个循环然后调用一个函数。所以也许有什么东西可以把标准输入变成一个数组,所以我可以用一个循环来代替?
while read
为您的循环创建数据:请注意,您的
concat
示例可以通过while read
替换tr '\n' ','
或类似的循环来完成。此外,
-t
测试没有说明您是否有命令行参数。或者,要同时处理命令行参数和标准输入(按此顺序):
或者,使用一些人似乎喜欢的简写:
我们还可以使用标准输入的重定向:
测试:
bash
具体来说,你可以这样做: