Posix
POSIX 在 case 語句中擷取換行符
我想在POSIX shell(破折號)的case語句中捕捉變數是否是多行的。
我試過這個:
q=' ' case "$q" in *$'\n'*) echo nl;; *) echo NO nl;; esac
它
nl
以 zsh 形式返回,但NO nl
以破折號形式返回。謝謝。
dash
shell 沒有 C 字元串 ( )$'...'
。C-strings 是 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