为了它的价值,我需要经常这样做,并且永远无法记住确切的使用方法while IFS= read...
,因此我在bash配置文件中定义了以下函数:
# iterate the line of a file and call input function
iterlines() {
(( $# < 2 )) && { echo "Usage: iterlines <File> <Callback>"; return; }
local File=$1
local Func=$2
n=$(cat "$File" | wc -l)
for (( i=1; i<=n; i++ )); do
"$Func" "$(sed "${i}q;d" "$File")"
done
}
此函数首先确定文件中的行数,然后用于sed
提取一行一行,并将每一行作为单个字符串参数传递给任何给定函数。我想这对于大文件来说可能真的效率低下,但是到目前为止,这对我来说并不是一个问题(当然,有关如何改善这种欢迎的建议)。
IMO的用法很不错:
>> cat example.txt # note the use of spaces, whitespace, etc.
a/path
This is a sentence.
"wi\th quotes"
$End
>> iterlines example.txt echo # preserves quotes, $ and whitespace
a/path
This is a sentence.
"wi\th quotes"
$End
>> x() { echo "$#"; }; iterlines example.txt x # line always passed as single input string
1
1
1
1
1
<
陷入一个完整的循环。尽管现在说得很对,我还是看到了