Bash

使用內置函式檢查 shell 變數是否不止一行?

  • December 26, 2021

我可以通過呼叫外部實用程序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

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