问题描述
在 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