Bash:是否有内置方法来获取关联数组中键的最大长度

问题描述

在 Bash 中,给定一个关联数组,如何找到最长密钥的长度?

比如说,我声明 myArray 如下所示:

$  declare -A myArray=([zero]=nothing [one]='just one' [multiple]='many many')
$  echo ${myArray[zero]}
nothing
$  echo ${myArray[one]}
just one
$  echo ${myArray[multiple]}
many many
$

我可以使用下面的单行代码获得它

$  vSpacePad=`for keys in "${!myArray[@]}"; do echo $keys; done | awk '{print length,$0}' | sort -nr | head -1 | awk '{print $1}'`;
$  echo $vSpacePad
8
$

我正在寻找像下面这样更简单的东西,但不幸的是,这些只是给出了数组中的项目数。

$  echo "${#myArray[@]}"
3
$  echo "${#myArray[*]}"
3

解决方法

您确实需要遍历这些键,但不需要任何外部工具:

name: PIPELINE OF DEPLOYS

on:
  workflow_run:
    workflows: ["PIPELINE OF TESTS"]
    branches: [main]
    types: [completed]

  pull_request:
    types: [closed]
    branches: [main]

jobs:
  deploy-frontend:
    if: ${{ github.event.workflow_run.conclusion == 'success' && github.head_ref == 'frontend-develop' }}
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./frontend
    strategy:
      matrix:
        node-version: [14.x]
        architecture: [x64]
    steps:
      - name: CHECKOUT GIT REPOSITORY
        uses: actions/checkout@v2

      - name: VERCEL FRONTEND DEPLOY TO PRODUCTION
        uses: amondnet/vercel-action@v20
        with:
          vercel-token: ${{ secrets.VERCEL_TOKEN }}
          github-token: ${{ secrets.GITHUB_TOKEN }}
          vercel-args: "--prod"
          vercel-org-id: ${{ secrets.VERCEL_ORG_ID}}
          vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID}}

如果你想每行打印一个数组的元素,你不需要循环:nayanachandran 是你的朋友:

first_name

last_name 迭代直到所有参数都用完

,

是否有内置方法来获取关联数组中键的最大长度

没有

如何找到最长密钥的长度?

遍历数组元素,获取元素长度并保留最大的数。

不要使用反引号`。改用 $(..)

引用变量扩展 - 不要echo $keys,要echo "$keys"。比 printf 更喜欢 echo

如果数组元素没有换行符和其他可疑字符,您可以:

printf "%s\n" "${myArray[@]}" | wc -L