【问题标题】:Bash array variable into single space elementsBash 数组变量转换为单个空格元素
【发布时间】:2018-05-16 16:31:05
【问题描述】:

我正在尝试使用数组从具有多个元素的变量中打印一个单词。这是一个脚本:

location=($(here mysql query to extract name of locations))
for i in "${location[@]}"; do
    echo "$i"
done

但是这些位置名称包含空格:MUMBAI - BORIVALIDELHI - 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 设置为逗号。请确保您准确地显示 mysql 生成的内容。
  • @cdarke 逗号仅在问题中显示不同的位置名称
  • 您的新编辑在字段之间显示连字符,对吗?
  • 我们为什么不消除猜测,然后您发布$(here mysql query to extract name of locations)的前10行?
  • 是的,有连字符,mysql查询只包含表名和条件。您可以将MUMBAI - BORIVLIDELHI - LAJPATNAGAR 视为列中的不同值以便更好地理解。

标签: arrays bash scripting


【解决方案1】:

如果位置不包含换行符,您可以尝试

while read -r location ; do
    echo "$location"
done < <(mysql ...)

read 如果只给出一个参数,则逐行读取。默认情况下,它从标准输入读取,但通过进程替换,我们将mysql 命令的输出重定向到它。

【讨论】:

  • @Lnux:已更新。
【解决方案2】:

尝试将 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)" 行,您将得到每个字母在单独的行中。

【讨论】:

  • 不用等待。 ..地点的实际名称不同。让我修改问题。它不像 1 2
  • @Lnux 然后将它们按三个分组。如果所有名称中的空格数不同,则说明您不走运或需要一些其他技巧。
  • @Lnux 已更新并更改为另一个解决方案。
  • 输出依然在一起
【解决方案3】:

只计算 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

【讨论】:

    猜你喜欢
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2011-12-18
    • 2021-09-11
    • 1970-01-01
    • 2012-02-23
    相关资源
    最近更新 更多