Arrays 将数组变量转换为单个空格元素
我正在尝试使用数组从包含多个元素的变量打印一个单词。下面是一个脚本:Arrays 将数组变量转换为单个空格元素,arrays,bash,scripting,Arrays,Bash,Scripting,我正在尝试使用数组从包含多个元素的变量打印一个单词。下面是一个脚本: location=($(here mysql query to extract name of locations)) for i in "${location[@]}"; do echo "$i" done 但是这些地点名称包含空格:MUMBAI-BORIVALI,德里-LAJPATNAGAR等等。因此,它的打印方式如下:调试模式下的输出: + for i in '"${LOCATION[@]}"' + ec
location=($(here mysql query to extract name of locations))
for i in "${location[@]}"; do
echo "$i"
done
但是这些地点名称包含空格:MUMBAI-BORIVALI
,德里-LAJPATNAGAR
等等。因此,它的打印方式如下:调试模式下的输出:
+ for i in '"${LOCATION[@]}"'
+ echo DELHI
DELHI
+ for i in '"${LOCATION[@]}"'
+ echo -
-
+ for i in '"${LOCATION[@]}"'
+ echo LAJPATNAGAR
LAJPATNAGAR
+ for i in '"${LOCATION[@]}"'
+ echo MUMBAI
MUMBAI
+ for i in '"${LOCATION[@]}"'
+ echo -
-
+ for i in '"${LOCATION[@]}"'
+ echo BORIVLI
BORIVLI
我试过用双引号:
location=("$(here mysql query to extract name of locations)")
然后输出是
+ for i in '"${LOCATION[@]}"'
+ echo 'DELHI - LAJPATNAGAR
MUMBAI - BORIVLI'
一起
我想要输出:
+ echo 'DELHI - LAJPATNAGAR'
DELHI - LAJPATNAGAR
+ echo 'MUMBAI - BORIVLI'
MUMBAI - BORIVLI
尝试将IFS设置为仅换行:
IFS="$(echo)"
location=($(here mysql query to extract name of locations))
for i in "${location[@]}"; do
echo "$i"
done
带有test.txt的示例:
A B C
D E
F
运行上述代码,将MySQL查询替换为cat test.txt
。输出:
A B C
D E
F
如果您删除IFS=“$(echo)”
行,您将在单独的行中获得每个字母。如果位置不包含换行符,您可以尝试
while read -r location ; do
echo "$location"
done < <(mysql ...)
读取-r位置时的;做
回显“$location”
完成<只需计算3个字段:
location=($(here mysql query to extract name of locations))
for ((i=0; i <= ${#location}; i+=3))
do
echo "${location[i]} ${location[i+1]} ${location[i+2]}"
done
location=($(这里是mysql查询以提取位置名称))
为了((i=0;i不等待…位置的实际名称不同。让我修改问题。它不像12@Lnux然后将它们按三个分组。如果所有名称的空格数都不相同,则说明您运气不好或需要其他技巧。@Lnux已更新并更改为其他解决方案。输出仍在一起您的编辑显示逗号between字段,对吗?在这种情况下,您可以将IFS
设置为逗号。请确保您准确显示mysql生成的内容。@cdark逗号仅在问题中显示不同的位置名称您的新编辑在字段之间显示连字符,对吗?我们为什么不消除猜测,然后您发布问题的前10行<代码> $(这里MySQL查询提取位置的名称)< /COD>?是的,有连字符和MySQL查询只包含表和条件的名称。您可以考虑<代码>孟买- BoRVLII< /COD>和<代码>德令哈市-LAJPATNARGAR <代码>作为列中的不同值,以便更好地理解。@ LNUX:更新。