我嘗試創建一個填充了某些值的數組。但我不知道該怎麼做。我嘗試了下面的東西,但沒有奏效。Bash腳本:在for循環中填充數組
我的代碼:
i=0
for c in colors; do
array[$i]=$c
echo {$c[$i]}
i=`expr $i + 1`
done
注: 「顏色」 是某種形式的 「PS -ef」 命令,它返回值的列表。例如它有「藍色,紅色,黃色」值。
colors= 'ps -ef | grep colors'
我嘗試創建一個填充了某些值的數組。但我不知道該怎麼做。我嘗試了下面的東西,但沒有奏效。Bash腳本:在for循環中填充數組
我的代碼:
i=0
for c in colors; do
array[$i]=$c
echo {$c[$i]}
i=`expr $i + 1`
done
注: 「顏色」 是某種形式的 「PS -ef」 命令,它返回值的列表。例如它有「藍色,紅色,黃色」值。
colors= 'ps -ef | grep colors'
你可以使用這個腳本,以填補在一個循環數組:
array=()
for c in $colors; do
array+=("$c")
done
或者也可以簡單:
array=($(command))
如果我們假設字符串分裂是給定的,那麼是的。如果輸入是一對一的,最佳實踐方法是使用while/read循環來分割元素 - 這樣我們就不會有glob擴展,基於IFS的分割,或者其他這樣的副作用。 –
有沒有關於你的「簡單」命令的例子?它是否像「array =($(」ps -ef | grep pmon「))」? – AloneInTheDark
@AloneInTheDark,沒有引號;只是'array =($(ps -ef | grep ...))' - 但由於幾個原因,這是一個不好的做法。 –
如果你的顏色在一到一個未來在你展開存儲它們的變量時,你可能會丟失信息(刪除空格和換行符之間的區別,擴展glob字符等)。
不要這樣做。相反,遵循BashFAQ #1:
colors=()
while IFS='' read -r color; do
colors+=("$color")
done < <(get-color-list)
如果你只是想,說這是更真實,具體的列了各行的; read
將爲您進行分欄,使分配更容易。
準確*返回'colors'列表很重要。如果他們一對一返回,那麼有更可靠的方法可以將它們分解出來(比如你正在做什麼,以及你接受的答案是做什麼的,哪些將會改變),比如,當前目錄中的文件列表的顏色'*',或者兩個條目'light'和'洋紅色'的顏色'light magenta')。 –
順便說一句,在bash中,'((++ i))'是寫'i = $(expr $ i + 1)'的現代方式。 –
...並且唯一與您的代碼完全無關的東西(與最佳做法違規相對)正在編寫'{$ c [$ i]}'而不是'$ {c [$ i]}'和'in colors '而不是'在$顏色'中。 –