2

我正在尝试在 shell 上使用 shell 脚本做非常简单的事情BASH。我正在尝试将所有用户的 keyids 放入 shell 脚本中的数组中。我稍后将循环它们以进行进一步处理。

我写了非常简单的代码。但是我在将空格分隔的 QUERY_RESULTS 字符串转换为数组时被卡住了。

我尝试了各种选项,例如,set -A等。没有什么对我有用。我尝试的每件事都会给我一些错误。read -aarray=( $ 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;
4

3 回答 3

2

你有没有尝试过这样的事情:

read -r -a array <<< $QUERY_RESULTS

注意“<<<”而不是“<<”

如果 QUERY_RESULTS 的内容由多行组成,您可能希望这样做:

mapfile -t array <<< $QUERY_RESULTS
于 2013-01-28T17:06:36.770 回答
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
于 2013-01-29T14:33:52.130 回答
1

在 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[@]}")

请注意,您需要 mysql cmd 中的“()”,这使结果成为可以在循环中使用的 bash 数组。而“%s”,“,”是换成str时用来分隔元素的分隔符,如果需要可以换成其他的分隔符。

于 2016-06-27T11:27:42.763 回答