Bash
我可以在不使用循環的情況下從此命令中刪除 bash 子程序嗎?
這是一個純粹的審美問題,因為我現在有一個工作命令,但我想
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