Bash
驗證變數的長度
我必須驗證變數讀取的長度(我的腳本限制為五個插入的字元),我想這樣的事情:
#!/bin/bash read string check=${#string} echo $check if [ $check -ge 5 ]; then echo "error" ; exit else echo "done" fi
有沒有更“優雅”的解決方案?
更優雅?不
更短?是的 :)
#!/bin/bash read string if [ ${#string} -ge 5 ]; then echo "error" ; exit else echo "done" fi
如果你在用更優雅換取更短沒有問題,你可以有一個少 2 行的腳本:
#!/bin/bash read string [ ${#string} -ge 5 ] && echo "error" || echo "done"
如果您認為它更安全,可以使用雙括號。在這裡解釋。
與 Bourne 兼容的替代方案(
${#string}
是 POSIX 但不是 Bourne(不是說你現在可能會遇到 Bourne shell)):case $string in ?????*) echo >&2 Too long; exit 1;; *) echo OK esac
請注意,對於
${#string}
和????
,它是字節數還是字元數將取決於外殼。通常(並且它是 POSIX 要求的),它是字元數。但是對於像這樣的一些不支持多字節的 shelldash
,它將是字節。使用
mksh
,您需要set -o utf8-mode
(在 UTF-8 語言環境中)讓它理解多字節字元:$ string=€€€ bash -c 'echo "${#string}"' 3 $ string=€€€ dash -c 'echo "${#string}"' 9 $ string=€€€ mksh -c 'echo "${#string}"' 9 $ string=€€€ mksh -o utf8-mode -c 'echo "${#string}"' 3 $ locale charmap UTF-8