Hello Stackoverflow community,
为了使我的代码尽可能减少"复制粘贴",我正在尝试提出一种更智能的方法来使其更紧凑。
有没有办法在你的脚本中创建一个"条件 while"语句(如果这甚至是一件事(,而不必重复所有内容?基本上,我有相同的核心函数,但应该根据变量是否存在而触发不同的 while 语句。
请参阅下面的原始脚本:
messenger() {
msg1=$1
count=0
echo " "
while [[ $count -ne ${#1} ]]
do
echo -n "*"
((count += 1))
done
echo -e "n$1"
while [[ $count -ne 0 ]]
do
echo -n "*"
((count -= 1))
done
echo -e "n"
}
这是我的核心函数,但我希望计数等于提供的变量$val的可能性,而不是计算 $1 的长度,但前提是提供它。
我想实现的目标 - 但由于语法而不起作用:
messenger() {
msg1=$1
val=$2
count=0
echo " "
if [[ -z $val ]]
then
while [[ $count -ne ${#1} ]]
else
while [[ $count -ne $val ]]
fi
do
echo -n "*"
((count += 1))
done
echo -e "n$1"
while [[ $count -ne 0 ]]
do
echo -n "*"
((count -= 1))
done
echo -e "n"
}
我设法实现的唯一方法是重用大部分核心,基本上是复制粘贴操作。我想想出一个更好的方法来实现这一目标:
messenger() {
msg1=$1
val=$2
count=0
echo " "
if [[ -z $val ]]
then
while [[ $count -ne ${#1} ]]
do
echo -n "*"
((count += 1))
done
echo -e "n$1"
while [[ $count -ne 0 ]]
do
echo -n "*"
((count -= 1))
done
echo -e "n"
else
while [[ $count -ne $val ]]
do
echo -n "*"
((count += 1))
done
echo -e "n$1"
while [[ $count -ne 0 ]]
do
echo -n "*"
((count -= 1))
done
echo -e "n"
fi
}
我相信这个例子完美地总结了我想要实现的目标。如果你能指出我一个方向,我将不胜感激。
$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
提前谢谢你,
伊凡
使用默认值运算符。
while [[ $count -ne ${val:-${#1}} ]]
如果val
不为空,则将使用该值。否则,它将使用 ${#1}
.