Hello Stackoverflow社区,
为了使我的代码尽可能少“ copy-paste-ey”,我正在尝试提出一种更聪明的方法来使其更紧凑。
有什么方法可以在脚本中创建“有条件的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)
先谢谢您
伊凡
答案 0 :(得分:3)
使用默认值运算符。
while [[ $count -ne ${val:-${#1}} ]]
如果val
不为空,则将使用该值。否则,它将使用${#1}
。