Bash

讀取數組值作為使用者輸入會給出錯誤的數組長度,並且只有 -a 或 -p 在讀取時有效

  • August 23, 2017

問題1:我想在執行時獲取數組項作為使用者輸入;列印項目並列印數組長度。這就是我所擁有的:

read -a myarray
echo "array items" ${myarray[@]}
echo "array length" ${#myarray[@]}

在執行時,我將以下內容作為輸入,

$ ("apple fruit" "orange" "grapes")

輸出是,

array items "apple fruit" "orange" "grapes"
array length 4

這是不正確的。

如果我不要求使用者輸入而是使用聲明和初始化的數組作為程式碼的一部分,因為myarray=("apple fruit" "orange" "grapes")數組長度回顯為 3。所以,看來我對讀取命令的使用不正確。

問題2:如果我在讀取命令中添加如下提示,

read -p "enter array items: " myarray

第一項“蘋果水果”被列印為水果”,長度也錯誤。

如果我刪除提示並添加 -a,一切都很好。如果我將 a 和 p 結合起來並將其作為 read -ap,則根本不會彈出提示。它等待沒有任何消息的值。為什麼會這樣?有人可以向我解釋什麼是錯的嗎?

問題1:

在您的範例中,read不從命令行參數獲取其輸入,而是從標準輸入。因此,它接收的輸入不會通過bash的字元串解析器。相反,它被視為由空格分隔的文字字元串。因此,通過您的輸入,您的數組值將變為:

[0]->("apple
[1]->fruit"
[2]->"orange"
[3]->"grapes"

要執行您想要的操作,您需要轉義您擁有的任何空格,以避免分隔符出現。即,您必須在呼叫後輸入以下輸入read

apple\ fruit oranges grapes

問題 2:為了read將接收到的輸入儲存為數組,您必須有一個-a開關後跟數組名稱。所以你需要:

read -a myarray -p "Enter your items"

引用自:https://unix.stackexchange.com/questions/387754