[英]How to replace an array variable of one shell script from another shell script's array variable?
我有兩個 shell 腳本, fruits_original.sh
和appending_fruits.sh
。 在fruits_original.sh
我有一個數組變量: fruits=('Apple' 'Mango' 'Guava')
。
我想要做的是我必須編寫一個 shell 腳本appending_fruits.sh
,它將接受一個參數,一些新的水果名稱是Orange
,並將 append 新水果名稱添加到fruits_original.sh
水果數組變量中。
腳本運行之后,fruits 數組應僅保留為數組,其值應為fruits=('Apple' 'Mango' 'Guava' 'Orange')
。
文件fruits_original.sh
有這個。 下面是appending_fruits.sh
腳本,我的變量正在變成這個fruits= ('Apple' 'Mango' 'Guava' 'Orange')
。 但是當我試圖做echo "${fruits[@]}"
我收到這個錯誤:
line 1: syntax error near unexpected token `('
運氣好的話?
fruits= ('Apple' 'Mango' 'Guava')
echo "${fruits[@]}"
declare -a var=$(awk -F'=' '/^fruits=/ {print $2}' fruits_original.sh)
echo "${var[@]}"
var[${#var[@]}]='Orange'
joined=$(printf " '%s'" "${var[@]}")
echo ${joined:1}
echo "${joined[@]}"
sed -i "s/fruits=.*/fruits= ($( echo ${joined:1})) /" fruits_original.sh
不要修改腳本文件。 相反,創建另一個文件並從中獲取動態數據。 我選擇了配置的位置在/tmp
目錄中。
# fruits_original.sh
fruits=()
if [[ -e /tmp/fruits_original.rc ]]; then
. /tmp/fruits_original.rc
fi
some stuff
然后生成配置文件。 使用declare -p
安全地 output 正確引用變量。
# appending_fruits.sh
fruits=()
if [[ -e /tmp/fruits_original.rc ]]; then
. /tmp/fruits_original.rc
fi
fruits+=("new fruit")
decalre -p fruits > /tmp/fruits_original.rc
在fruits_original.sh
中放置一個 uuid 以識別您想要使用的代碼片段在哪里。
# fruits_original.sh
# snip 419d0df3-5f08-4511-ad5a-ad24db45aa6c
fruits=()
# snip 419d0df3-5f08-4511-ad5a-ad24db45aa6c
some stuff
然后用sed
或其他工具提取相關部分,將declare "$part"
為變量,append 正常捕獲 output 從declare -p
中再次替換標記之間的內容。
如果不采用上述任何方法,並且這只是一個測試某些東西的玩具示例,您可以:
# read the line from another script
declare "$(sed '/fruits=/!d' fruits_original.sh)"
# append element
fruits+=(Orange)
# create source-able output
new="$(declare -p fruits)"
# remove declare -- in front
new="fruits=${new%*fruits=}"
# Replace the line with declare -p output.
sed -i "s/fruits=.*/fruits=$new/" fruits_original.sh
筆記:
var[${#var[@]}]='Orange'
- 只是var+=(Orange)
。 不需要${#
。$( echo ${joined:1})
是對echo
的無用使用(除非您想要分詞和文件名擴展)。fruits= (
不是一個賦值,將運行一個子shell,可能會導致語法錯誤。在=
周圍的賦值中沒有空格。declare -a var=$(
- var不是一個數組(或者,它是一個只有一個元素的數組)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.