我正在比较 case 语句中的字符串,如下所示:输入变量可以是 DP KL ...
case $input in
D|P|Q|L1|L2)
val="Hello";;
DD|DE|DF|CA)
val="Hi" ;;
MM|KL||TK|SZ)
val="Bye" ;;
echo $input
输入变量不打印任何内容..
答案1
您的脚本中有两个主要问题:
- 该
case
声明未由 关闭esac
。 - 第三个模式包含
||
which 是大多数类似 Bourne 的 shell 中的语法错误(使用''
or""
或 解析为空值以可移植地匹配空字符串的扩展)
目前还不清楚你的脚本实际上在做什么,所以我推测了一下并写道:
#!/bin/sh
input="$1"
case "$input" in
D|P|Q|L1|L2)
val='Hello' ;;
DD|DE|DF|CA)
val='Hi' ;;
MM|KL|""|TK|SZ)
val='Bye' ;;
*)
echo 'error' >&2
exit 1
esac
printf 'input was "%s", val is "%s"\n' "$input" "$val"
测试它:
$ ./script.sh D
input was "D", val is "Hello"
$ ./script.sh MM
input was "MM", val is "Bye"
$ ./script.sh BOO
error