我想在POSIX shell(破折号)的case语句中捕捉变量是否是多行的。
我试过这个:
q='
'
case "$q" in
*$'\n'*) echo nl;;
*) echo NO nl;;
esac
它nl
以 zsh 形式返回,但NO nl
以破折号形式返回。
谢谢。
我想在POSIX shell(破折号)的case语句中捕捉变量是否是多行的。
我试过这个:
q='
'
case "$q" in
*$'\n'*) echo nl;;
*) echo NO nl;;
esac
它nl
以 zsh 形式返回,但NO nl
以破折号形式返回。
谢谢。
dash
shell 没有 C 字符串 ( )$'...'
。C-strings 是 POSIX 标准的扩展。您将不得不使用文字换行符。如果将换行符存储在变量中,这会更容易(并且看起来更好):对于给脚本的每个命令行参数,这会检测它是否包含换行符。
case
语句( )中使用的变量$string
不需要引用,;;
最后一个case
标签之后的也不需要。测试(来自交互式
zsh
外壳,这是dquote>
辅助提示的来源):您可以包含一个文字换行符(用引号引起来)作为模式,就像您在分配给变量时所做的那样:
这使得格式很难看(你不能缩进结束引号),但应该是完全可移植的。我在 bash、zsh、ksh 和 dash 中进行了测试。