检查数组条目中的字符串值(主要是语法错误)
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
我陷入语法缺失;尝试了多种方法,但不知何故我看不到解决方案。我敢肯定它非常简单,但我目前就是不明白。
目标
将 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