我在BASH
shell上使用shell脚本尝试非常简单。我试图将所有用户的keyids放入shell脚本中的数组中。我稍后将循环它们以进行进一步处理。
我编写了非常简单的代码。但是在将空格分隔的QUERY_RESULTS字符串转换为数组时,我陷入困境。
我尝试了各种选择,例如set -A
,read -a
,array=( $ QUERY_RESULTS } )
等
没有什么对我有用。我尝试的每件事都给了我一些错误。
例如
set -A
给了我illegal option -A
。 read -a
也给了我illegal option -a
。 array=( $ QUERY_RESULTS } );
给了我( unexpected
。以下是我的代码。请帮帮我。
#IFS="";
echo "Get list of Active Users from Table ";
QUERY_RESULTS=$( mysql -u username password -e "SELECT keyid from users where isActive = 1" );
echo $QUERY_RESULTS;
#eval `read -a arr <<$QUERY_RESULTS`;
#array=( $ QUERY_RESULTS } );
echo $array;
答案 0 :(得分:2)
你有没有试过这样的事情:
read -r -a array <<< $QUERY_RESULTS
请注意“&lt;&lt;&lt;&lt;&lt;&lt;而不是“&lt;&lt;”
如果QUERY_RESULTS的内容由多行组成,您可能希望这样做:
mapfile -t array <<< $QUERY_RESULTS
答案 1 :(得分:1)
我可以使用以下代码实现我的目标。但是我仍然在将QUERY RESULT转换为字符串时遇到问题。
echo "Get list of Active Users from Table ";
QUERY_RESULTS=$( mysql -u username password -e "SELECT keyid from users where isActive = 1" );
for i in `echo $QUERY_RESULTS | tr ' ' '\n' |sed '1d' | tr '\n' ' '`
do
sh doAction.sh $i;
done
答案 2 :(得分:0)
在bash中,您可以获取数组和字符串,如下所示:
query="SELECT keyid from users where isActive = 1;"
QUERY_RESULTS=($(mysql -u username password -e "$query"))
或
QUERY_RESULTS=(`mysql -u username password -e "$query"`)
QUERY_RESULTS_STR=$(printf "%s," "${QUERY_RESULTS[@]}")
请注意你需要&#34;()&#34;超出mysql cmd,这使得结果成为可以在循环中使用的bash数组。 &#34;%s,&#34;,&#34;,&#34;是更改为str时分隔元素的分隔符,如果需要,可以更改为其他分隔符。