如何将字符串扩展到一定长度

时间:2017-03-19 17:52:48

标签: bash shell

嘿,现在基本上我的程序给了我这个输出:

  

BLABLABLA
  TEXTEXOUAIGJIOAJGOAJFKJAFKLAJKLFJKL
  TEXT
  更多关于随机字符的文字

这是for循环的结果。现在这就是我想要的:

  • 如果字符串超过10个字符,则剪切其余字符并添加两个点&冒号到最后“..:”
  • 否则(如果字符串少于10个字符)用空格填充空格,以便它们全部对齐

所以在我提供的例子中,我想要这样的输出:

BLABLABLA  :  
TEXTEXOUA..:  
TEXT       :
MORE TEXT..:

我也解决了问题的第一部分(当它超过10个字符时),只有第二部分给我带来了麻烦。

AMOUNT=definition here, just simplyfying so not including it
for (( i=1; i<="$AMOUNT"; i++ )); do
STRING=definition here, just simplyfying so not including it
DOTS="..:"
STRING_LENGTH=`echo -n "$STRING" | wc -c`
if [ "$STRING_LENGTH" -gt 10 ]
    then
          #Takes 
          STRING=`echo -n "${STRING:0:10}"$DOTS` 
    else
          #now i dont know what to do here, how can i take my current $STRING 
          #and add spaces " " until we reach 10 characters. Any ideas?
    fi

2 个答案:

答案 0 :(得分:2)

Bash提供了一种获取存储在变量中的字符串长度的简单方法:${#STRING}

STRING="definition here, just simplyfying so not including it"
if [ ${#STRING} -gt 10 ]; then
    STR12="${STRING:0:10}.."
else
    STR12="$STRING            "         # 12 spaces here    
    STR12="${STR12:0:12}"
fi
echo "$STR12:"

您发布的预期输出与问题中的要求不符。我试图遵循这些要求并忽略了样本预期输出和您发布的代码。

答案 1 :(得分:0)

使用printf:

PADDED_STRING=$(printf %-10s $STRING)