首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bash中,将带有空格的输入作为数组中的单个元素

在bash中,将带有空格的输入作为数组中的单个元素
EN

Stack Overflow用户
提问于 2015-06-17 02:55:20
回答 3查看 53关注 0票数 2

我有一个文件,我使用cut命令从该文件提取前三列,并将它们写入到一个数组中。

当我检查数组的长度时,结果是4。我需要数组只有3个元素。

我认为它将空格作为数组元素的分隔符。

代码语言:javascript
复制
aaa|111|ADAM|1222|aauu

aaa|222|MIKE ALLEN|5678|gggg
aaa|333|JOE|1222|eeeee

target=($(cut -d '|' -f1-3 sample_file2.txt| sort -u ))
EN

回答 3

Stack Overflow用户

发布于 2015-06-17 03:02:45

bash 4或更高版本中,使用带有进程替换的readarray来填充数组。因此,您的代码无法区分输出中分隔每一行的空格和"Mike Allen“中出现的空格。readarray命令将输入的每一行放入单独的数组元素中。

代码语言:javascript
复制
readarray -t target < <(cut -d '|' -f1-3 sample_file2.txt| sort -u)

bash 4之前,您需要一个循环来分别读取分配给数组的每一行。

代码语言:javascript
复制
while IFS='' read -r line; do
    target+=("$line")
done < <(cut -d '|' -f1-3 sample_file2.txt | sort -u)
票数 2
EN

Stack Overflow用户

发布于 2015-06-17 06:11:07

这应该是可行的:

代码语言:javascript
复制
IFS=$'\n' target=($(cut -d '|' -f1-3 sample_file2.txt| sort -u ))

示例:

代码语言:javascript
复制
#!/bin/bash
IFS=$'\n' target=($(cut -d '|' -f1-3 sample_file2.txt| sort -u ))
echo ${#target[@]}
echo "${target[1]}"

输出:

代码语言:javascript
复制
3
aaa|222|MIKE ALLEN
票数 1
EN

Stack Overflow用户

发布于 2015-06-17 05:50:16

作为替代方案,使用臭名昭著的eval

代码语言:javascript
复制
eval target=($(cut -sd '|' -f1-3 sample_file2.txt | sort -u | \
               xargs  -d\\n printf "'%s'\n"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30875929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档