我有一个基于variables的值执行操作的Bash脚本。 case语句的一般语法是: case ${command} in start) do_start ;; stop) do_stop ;; config) do_config ;; *) do_help ;; esac 如果没有提供命令,我想执行默认例程,如果命令无法识别,则执行do_help。 我尝试省略案例价值: case ${command} in ) do_default ;; … *) do_help ;; esac 结果是可以预见的,我想: syntax error near unexpected token `)' 然后,我尝试在正则expression式中使用我的最佳镜头: case ${command} in ^$) do_default ;; … *) do_help ;; esac 有了这个,一个空的$ {command}就进入了*的情况。 我想要做不可能的事情吗?
看起来像简单的CASEexpression式和DECODE函数是等价的,它们返回的结果应该是相同的。 他们? 该文档有以下关于简单的CASEexpression式的说法: 简单的CASEexpression式返回selector_value匹配select器的第一个结果。 剩余的expression式不被评估。 如果没有selector_value匹配select器,则CASEexpression式返回else_result(如果存在),否则返回NULL。 将其与DECODE函数进行比较,说明似乎是相同的。 DECODE将expr与每个search值逐一进行比较。 如果expr等于search,则Oracle数据库返回相应的结果。 如果找不到匹配,则Oracle返回默认值。 如果省略默认值,那么Oracle返回null。 由于search到的CASEexpression式可以等价于简单的,所以这可以被解释为相同。 这三个陈述似乎都返回相同的结果0。 select case 1 when 2 then null else 0 end as simple_case , case when 1 = 2 then null else 0 end as searched_case , decode(1, 2, null, 0) as decode from dual 做简单的CASEexpression式和DECODE函数(在特定情况下search的CASEexpression式)总是返回相同的结果吗?