检查数组条目中的字符串值(主要是语法错误)

Check array entry for string value (mostly a syntax error)

我陷入语法缺失;尝试了多种方法,但不知何故我看不到解决方案。我敢肯定它非常简单,但我目前就是不明白。

目标

将 QUEUE_STRING 分成 2 个参数,检查第一个是否与 2 个字符串中的一个相等,将第二个添加到另一个命令行调用中

到目前为止我得到了什么

#!/bin/sh
QUERY_STRING="setSize&10240000"
arr=${QUERY_STRING//&/ }
if [ $arr[0] = "status" ]; then
      echo "YES"
      ./myApp status
elif [ $arr[0] = "setSize" ] ; then
      echo "NO"
      ./myApp setSize $arr[1]
else 
      echo "ERROR"
fi

我只是收到“错误”,但我应该收到“否”

感谢您的帮助

给你:

#!/bin/bash
set -x # you can comment off this line to disable debug output
QUERY_STRING="setSize&10240000"
arr=(${QUERY_STRING//&/ })
if [ "{$arr[0]}" = "status" ]; then
      echo "YES"
      ./myApp status
elif [ "${arr[0]}" = "setSize" ] ; then
      echo "NO"
      ./myApp setSize $arr[1]
else
      echo "ERROR"
fi

编辑

这里是 sh

#!/bin/sh
set -x # you can comment off this line to disable debug output
QUERY_STRING="setSize&10240000"
arr=$(echo "$QUERY_STRING"|cut -d\& -f 1)
if [ "$arr" = "status" ]; then
      echo "YES"
      ./myApp status
elif [ "$arr" = "setSize" ] ; then
      echo "NO"
      ./myApp setSize "$(echo "$QUERY_STRING"|cut -d\& -f 2)"
else
      echo "ERROR"
fi

发布的代码假定 'arr' 是一个数组,尝试使用 $arr[0] 访问第 0 个元素。两者都编码不正确,需要修复。

对 arr 的赋值应该创建一个数组。这可以通过“read -a”

来完成
read -a arr <<< "${QUERY_STRING//&/ }"

第一个元素的检查应该使用“${arr[0]}”而不是 $arr[0]:

if [ "${arr[0]}" = "status" ]; then
      echo "YES"
      ./myApp status
...

在 shell 中拆分字符串是一个相当常见的习惯用法:使用 IFS 并阅读:

如果您使用 bash,请使用 here-string:

IFS='&' read -r key value <<<"$QUERY_STRING"

如果您想要便携性或者您使用的是普通 POSIX shell,请使用 here-doc:

IFS='&' read -r key value <<END_INPUT
$QUERY_STRING
END_INPUT

或者,参数替换:

key=${QUERY_STRING%%&*}   # remove the longest suffix starting with '&'
value=${QUERY_STRING#*&}  # remove the shortest prefix ending with '&'

那么 case 语句比级联 if

更紧凑
case "$key" in
  status)  echo YES; ;;
  setSize) echo NO; echo "$value" ;;
  *)       echo ERROR ;;
esac
NO
10240000