【发布时间】:2016-12-25 23:47:50
【问题描述】:
问题描述
给定一个包含一行命令行参数的纯文本文件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
目前还没有已知的解决方案。
【问题讨论】:
-
@sorontar 我希望脚本从标准输入读取。所以他们被称为
./refimpl.sh < args.in。该部分已修复。 -
@StevenPenny 在此处添加 shebang 会使问题变得更长。我认为任何一种方式都不会影响结果。
-
如果输入在标准输入上以
"a b" c之类的形式出现,您可以使用eval "arr=( $(cat) )"。 -
@thatotherguy 那你为什么不写一个答案呢?我测试了几个输入,看起来不错。我唯一担心的是
eval的潜在风险很难驾驭。 -
使用
eval没有refimpl.sh没有的风险或问题。
标签: arrays bash shell arguments lexical-analysis