Bash
使用內置函式檢查 shell 變數是否不止一行?
我可以通過呼叫外部實用程序
sed
(對於已知的非空$myvar
)來做到這一點,如下所示:if [ "$(printf %s "$myvar" | sed -n '$=')" -eq 1 ]; then echo "Your variable has only one line, proceeding" else echo "Error condition, variable must have only one line" fi
有沒有辦法只使用內置函式來做到這一點
bash
?更好的是,有沒有辦法以 POSIX 指定的方式執行此操作,而無需呼叫外部實用程序?
(這個問題是出於好奇和尋找更好的做事方法;上面的程式碼確實起作用。我想知道是否有更清潔/更快的方法。)
POSIX方式:
NL=' ' case $myvar in *"$NL"*) echo more than one line ;; *) echo one line ;; esac
這也適用於 pre-POSIX Bourne-like shell。
以下片段適用於
bash
(有和沒有-posix
選項):#!/bin/bash #!/bin/bash -posix version_1 () { [[ "$myvar" = *$'\n'* ]]; } version_2 () { local newlines="${myvar//[^$'\n']/}" [[ "${#newlines}" -eq 1 ]] } for test in version_1 version_2; do if $test; then echo many lines; else echo one line; fi done