我想在X空格中居中一个字,所以我写了这个函数:
function center {
str=$1
M=$2
N=${#str}
if (( N >= M )); then
echo $str
exit
fi
P=$((M-N))
HP=$((P/2))
left=""
right=""
for i in [1..HP]; do :
left=" $left"
right=" $right"
done
if (( (P-2*HP) == 1 )); then
right=" "$right""
fi
echo "HP is $HP"
echo "Right is |"${right}"|"
echo "Left is |$left|"
echo "str is |$str|"
res=$right$str$left
echo "$res"
}
问题并不重要,我所做的不能正确或左转地抓住多个空白。我已经尝试了其他答案的建议,但我似乎无法使它们工作。请帮忙。
答案 0 :(得分:0)
试试这个(在一些变量引用和一些其他修复之后):
function center {
str=$1
M=$2
N=${#str}
if (( N >= M )); then
echo "$str"
exit
fi
(( P=M-N ))
(( HP=P/2 ))
left=$(printf '%*s' "$HP" "")
right=$left
(( (P-2*HP) == 1 )) && right=" "$right""
echo "HP is $HP"
echo "Right is |${right}|"
echo "Left is |$left|"
echo "str is |$str|"
res="$right$str$left"
echo "$res"
}
for i in [1..HP]
无效。
printf '%*s' "$HP" ""
是获得$HP
空格的更惯用的方法。
最好构建一个变量$left
并将其复制到$right
,而不是构建两个变量。