【发布时间】:2019-07-01 13:57:32
【问题描述】:
我有一个变量,其中包含例如['Cars', 'House', 'Bike']。我希望能够搜索与字符串中包含的值完全匹配的值。
示例:
- 我检查字符串
Cars是否存在于变量中。它应该返回true。 - 我检查字符串
Car是否存在于变量中。它应该返回false。
我尝试了什么:
#!/bin/bash
search="Car"
arr="['Cars', 'House', 'Bike']"
if [[ $search =~ .*"$arr".* ]]; then
echo "true"
else
echo "false"
fi
# Output true | Expected false
另一个脚本:
#!/bin/bash
search="Cars"
arr="['Cars', 'House', 'Bike']"
check=0
grep -o "'[^']*'" <<<"$arr" | sed "s/'//g" |
while read -r elem; do
if [ "$search" == "$elem" ]; then
check=1
fi
done
if [ "$check" == 1 ]; then
echo "true"
else
echo "false"
fi
# Output false | Expected true
【问题讨论】:
-
解析
bash中的JSON就像和婴儿锯木头一样:你真的不想这样做,如果你这样做,会有很多情绪上的痛苦。使用jq或任何更高的编程语言。这些天来,Ruby、Python 和 Perl 都几乎可以保证安装,jq很容易安装。见Parsing JSON with Unix tools和How to check if element exists in array with jq -
我可以在我的脚本中使用 python。更新标签
-
我认为这应该可以工作
variableTocheck='CarslistData = ['Cars', 'House', 'Bike']valPresent = variableTocheck in listData现在如果数据存在则 valPresent 将为真,否则它将为假 -
显然,如果您能够只使用本机 bash 数组,而不是这个邪恶的 JSONoid,这个问题就会变成very different question。 :P
-
我无法使用数组,因为我得到了 cURL 命令的响应