Bash:从stdin读取args到数组

时间:2016-12-25 23:47:50

标签: arrays bash shell arguments lexical-analysis

问题描述

给定一个包含一行命令行参数的纯文本文件args.in,将它们读入数组。

问题制定

我们有4个文件:

args.in

"ab" c

refimpl.sh

read -r line
bash -c "bash showargs.sh $line"

arrayimpl.sh

arr=()

# BEGIN-------------------------
# Input comes from stdin.
# You need to set arr here.
# END---------------------------

echo "${#arr[@]}"
for i in "${arr[@]}"; do
    echo "$i"
done

showargs.sh

echo "$#"
for i in "$@"; do
    echo "$i"
done

将它们放入同一文件夹中。我们希望您实施arrayimpl.sh以便

bash refimpl.sh < args.in

bash arrayimpl.sh < args.in

给出相同的输出。

您的解决方案应该只包含一个文件arrayimpl.sh

输出示例

2
ab
c

此问题是this的更好表述,但不是this的重复。有些解决方案在那里工作但不在这里例如,当我们有以下输入时:

args.in

"a\"b" c

目前还没有已知的解决方案。

1 个答案:

答案 0 :(得分:2)

此分配的预期解决方案等同于:

eval "arr=( $(cat) )"

这会将输入评估为shell单词,这也是refimpl.sh的作用。

这仅适用于玩具问题和家庭作业。真实软件不应使用可执行代码作为数据格式。