【发布时间】:2019-01-14 13:00:02
【问题描述】:
你好 Stackoverflow 社区,
为了使我的代码尽可能少“复制粘贴”,我正在尝试提出一种更智能的方法来使其更紧凑。
有没有什么方法可以在你的脚本中创建一个“条件 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"
}
这是我的核心功能,但不是计算 $1 的长度,我希望计数等于提供的变量 $val 的可能性,但前提是它提供了。
我想要实现的 - 但由于语法原因无法实现:
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)
提前谢谢你,
伊万
【问题讨论】:
标签: linux bash if-statement while-loop