Bash

我可以在不使用循環的情況下從此命令中刪除 bash 子程序嗎?

  • September 14, 2020

這是一個純粹的審美問題,因為我現在有一個工作命令,但我想wc -m在沒有顯式循環或執行子 shell/子 shell 程序的情況下對客戶端數組中的每個元素執行。Bash 是在 macOS 上執行的 v5.0.18。

clients=(one two three)
printf '%s\n' "${clients[@]}" | xargs -I{} bash -c 'echo -n {} | wc -m' | sort -nr | head -1

經過更多的Google搜尋,我發現了這個不錯的 awk 腳本:

printf '%s\n' "${clients[@]}" | awk '{print length}' | sort -nr | head -1

如果您對非單行解決方案持開放態度,我發現功能非常令人愉悅:

length() {
   echo ${#1}
}
map() {
   func=$1
   shift
   for arg; do
       $func "$arg"
   done
}
max() { 
   read -r max
   while read -r arg; do
       (( arg > max )) && max=$arg
   done
   echo $max
}

接著

map length "${clients[@]}" | max 

引用自:https://unix.stackexchange.com/questions/609276