私はいくつかのシェルがこの種のテストを可能にすることを知っています。
t() { [[ $var == *$'\n'* ]] && res=yes || res=no
printf '%s ' "$res";
}
var='ab
cd'
t
var='abcd'
t
echo
実行時:
$ bash ./script
yes no
POSIXに対応するタスクは何ですか(ダッシュ)
次のテスト方法は信頼できますか?
nl=' ' t() { case "$var" in *$nl* ) res=yes ;; * ) res=no ;; esac printf '%s ' "$res" } var='ab cd' t var='abcd' t echo
ベストアンサー1
変数に新しい行を入れてパターンマッチングを実行できますcase
。
$ cat nl.sh
#!/bin/sh
nl='
'
case "$1" in
*$nl*) echo has newline ;;
*) echo no newline ;;
esac
$ dash nl.sh $'foo\nbar'
has newline
$ dash nl.sh $'foobar'
no newline
改行を作成する別の方法は次のとおりです。
nl=$(printf "\nx"); nl=${nl%x}
明らかなコマンド置換は、置換が末尾の改行を削除するため、機能しません。