POSIXシェルのCaseステートメント変数が複数行(ダッシュ)かどうかをキャプチャしたいと思います。
私はこれを試しました:
q='
'
case "$q" in
*$'\n'*) echo nl;;
*) echo NO nl;;
esac
nl
zshとして返されますが、ダッシュNO nl
では返されません。
ありがとうございます。
ベストアンサー1
シェルにはdash
C文字列()はありません$'...'
。 C 文字列は POSIX 標準の拡張です。リテラルの改行を使用する必要があります。改行文字を変数に保存すると、簡単で見やすくなります。
#!/bin/dash
nl='
'
for string; do
case $string in
*"$nl"*)
printf '"%s" contains newline\n' "$string"
;;
*)
printf '"%s" does not contain newline\n' "$string"
esac
done
スクリプトに提供されている各コマンドライン引数に改行文字が含まれていることを確認してください。case
ステートメント()で使用される変数には$string
引用符は必要なく、;;
最後のラベルcase
の後にも必要ありません。
テスト(セカンダリプロンプトが表示される対話型シェルzsh
から):dquote>
$ dash script.sh "hello world" "hello
dquote> world"
"hello world" does not contain newline
"hello
world" contains newline