Bash脚本无法弄清楚如何连接空格

时间:2016-10-20 15:16:47

标签: bash

我想在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"

}

问题并不重要,我所做的不能正确或左转地抓住多个空白。我已经尝试了其他答案的建议,但我似乎无法使它们工作。请帮忙。

1 个答案:

答案 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,而不是构建两个变量。