2016-12-25 32 views
-2

問題描述

鑑於含有的命令行參數一行明文文件args.in,它們讀入的陣列。擊:閱讀來自標準輸入ARGS成陣列

問題闡述

我們有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 "[email protected]"; do 
    echo "$i" 
done 

把日em進入相同的文件夾。我們想要實現的arrayimpl.sh使

bash refimpl.sh < args.in 

bash arrayimpl.sh < args.in 

給出相同的輸出。

您的解決方案應該只包含一個文件arrayimpl.sh

輸出示例

2 
ab 
c 

此問題是一個更好的製劑的this但不是this一個DUP。有些解決方案在那裏工作,但不在這裏例如,當我們有以下輸入:

args.in

"a\"b" c 

沒有已知的解決方案呢。

+0

@sorontar我想從腳本中讀取腳本。所以它們被稱爲'./refimpl.sh Cyker

+0

@StevenPenny在這裏添加shebang使問題更長。我認爲任何一種方式都不會影響結果。 – Cyker

+1

如果在標準輸入框中輸入的形式類似''a b「c',則可以執行'eval'arr =($(cat))''。 –

回答

2

此分配的預期的解決方案是等價的東西:

eval "arr=($(cat))" 

該評估輸入作爲外殼的話,這是refimpl.sh也做。

這僅適用於玩具問題和家庭作業。真正的軟件不應該使用可執行代碼作爲數據格式。

+0

我並不是靠近電腦,但它看起來像'refimpl.sh'一樣工作,這是OP所要求的。 –