如何在 while 循环中消除这个重复的 "git diff" 调用?
How can I eliminate this duplicated "git diff" call in a while loop?
如何优化此代码结构以避免重复代码 (git diff --ignore-space-at-eol -U0
)?
while [ ! -z "$(git diff --ignore-space-at-eol -U0)" ]; do
diff_text=$(git diff --ignore-space-at-eol -U0);
echo $diff_text
done
在 PHP 中可以这样做:
while (! $diff_text = "git diff --ignore-space-at-eol -U0") {
echo $diff_text;
}
我们需要代码,以便将 diff_text
变量减去 1 次。
使用带有中断条件的无限循环在中断循环的比较之前添加命令:
while true; do
i=$(date)
echo $i
[[ "$i" =~ "9 " ]] && break
sleep 1
done
您可以在 while 条件块中插入多条指令:
while
diff_text=$(git diff --ignore-space-at-eol -U0)
[ -n "$diff_text" ]
do
echo "$diff_text"
done
一个选项是使用设置 diff_text
变量的函数,如果它为空,returns 非零:
function set_diff_text
{
diff_text=$(git diff --ignore-space-at-eol -U0)
[[ -n $diff_text ]] && return 0 || return 1
}
while set_diff_text; do
printf '%s\n' "$diff_text"
done
另一种使用函数的方法是:
function get_diff_text
{
local difftxt
difftxt=$(git diff --ignore-space-at-eol -U0)
printf '%s\n' "$difftxt"
[[ -n $difftxt ]] && return 0 || return 1
}
while diff_text=$(get_diff_text); do
printf '%s\n' "$diff_text"
done
- 请参阅对 Why is printf better than echo? 的公认且优秀的回答,以了解我为何使用
printf
而不是 echo
来打印 git diff
输出的原因。
如何优化此代码结构以避免重复代码 (git diff --ignore-space-at-eol -U0
)?
while [ ! -z "$(git diff --ignore-space-at-eol -U0)" ]; do
diff_text=$(git diff --ignore-space-at-eol -U0);
echo $diff_text
done
在 PHP 中可以这样做:
while (! $diff_text = "git diff --ignore-space-at-eol -U0") {
echo $diff_text;
}
我们需要代码,以便将 diff_text
变量减去 1 次。
使用带有中断条件的无限循环在中断循环的比较之前添加命令:
while true; do
i=$(date)
echo $i
[[ "$i" =~ "9 " ]] && break
sleep 1
done
您可以在 while 条件块中插入多条指令:
while
diff_text=$(git diff --ignore-space-at-eol -U0)
[ -n "$diff_text" ]
do
echo "$diff_text"
done
一个选项是使用设置 diff_text
变量的函数,如果它为空,returns 非零:
function set_diff_text
{
diff_text=$(git diff --ignore-space-at-eol -U0)
[[ -n $diff_text ]] && return 0 || return 1
}
while set_diff_text; do
printf '%s\n' "$diff_text"
done
另一种使用函数的方法是:
function get_diff_text
{
local difftxt
difftxt=$(git diff --ignore-space-at-eol -U0)
printf '%s\n' "$difftxt"
[[ -n $difftxt ]] && return 0 || return 1
}
while diff_text=$(get_diff_text); do
printf '%s\n' "$diff_text"
done
- 请参阅对 Why is printf better than echo? 的公认且优秀的回答,以了解我为何使用
printf
而不是echo
来打印git diff
输出的原因。