Bash - 强制固定可变长度,我可以做得比这更容易吗?

问题描述 投票:0回答:2

我需要转换变量,使其具有精确的长度,如果太短,则将其扩展为空格,如果太长,则将其剪切。例如。对于 11 个字符的变量

$ var1=a
$ echo ${#var1}
1
$ var1=$(echo $var1 | sed 's/$/           /' | cut -c 1-11)
$ echo ${#var1}
11

虽然上面的方法有效,但对于我需要长字符串的情况来说,它似乎不太方便,所以我正在寻找更合适和优雅的东西。

bash variables
2个回答
2
投票

使用

printf

formatted=$(printf "%11.11s" "$var1")

示例:

printf "%11.11s\n" "a"
          a

printf "%11.11s\n" "abcdefghijklmnop"
abcdefghijk

您可以看到它使输出精确为 11 个字符长。


0
投票
# ===============================================================================================
# USAGE: debug a BASH script use INDENTION, BLUE funcname and YELLOW line number

# Cblue="[1;34m"
# Cyellow="[1;33m"
# Creset="[0;m"

# https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script
# exec 5> debug_output.txt
# BASH_XTRACEFD="5"
function debug_PS4() {
  local funcLvl=${#FUNCNAME[@]}
  local funcS="main"
  if (( funcLvl > 1 )) ; then
    funcS="${FUNCNAME[1]}"
  fi
  printf '%-*s%s[%s] : ' $(( ( funcLvl - 1 ) * 3)) " " "$Cblue$funcS$Creset" "$Cyellow$1$Creset"
}

function debug_start() {
  PS4='$(debug_PS4 $LINENO)'
  set -x
}
© www.soinside.com 2019 - 2024. All rights reserved.