Скажем, у меня есть массив, определенный как таковой:
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
os_icon
dir
vcs
newline
prompt_char
)
Теперь я хочу вставить элемент my_item
в массив после vcs
. Я не знаю, какой индекс у vcs
, все, что я знаю, это то, что я хочу вставить его сразу после vcs
Я пытался
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS:s/vcs/vcs my_item})
Но почему-то это не работает. Следующее работает для замены:
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS:s/vcs/my_item})
Но, конечно, удалит vcs... Я, очевидно, неправильно понимаю пробел, но, похоже, не могу понять это правильно.
Если бы вы знали индекс, вы могли бы просто присвоить фрагмент массива индексу vcs:
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[2]=(vcs my_item)
Поскольку вы не знаете индекс, но уверены, что элемент может существовать только один раз, просто присвойте его первому подходящему индексу:
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(i)vcs]}]=(vcs my_item)
Стенограмма сеанса оболочки, чтобы попробовать это:
/tmp [9:10]
❯ typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
os_icon
dir
vcs
newline
prompt_char
)
/tmp [9:10]
❯ echo ${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[3]}
vcs
/tmp [9:10]
❯ echo ${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[4]}
newline
/tmp [9:10]
❯ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(i)vcs]}]=(vcs my_item)
/tmp [9:10]
❯ echo ${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[3]}
vcs
/tmp [9:10]
❯ echo ${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[4]}
my_item
/tmp [9:10]
❯ echo ${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[5]}
newline
``