В Bash, v.4.3.11 (1) У меня есть этот пример кода:Bash один вкладыш для выделения имени каталога
#!/bin/bash
dir=("/home/user/Documents/" "/home/user/Music/" "/home/user/Videos/" \
"/home/user/Photos/")
baseDir="/home/user/"
for i in "${!dir[@]}"
do
niceName=${dir[$i]#"$baseDir"} # removes baseDir from front part
printf "%s\n" "${niceName%"/"}" # also removes trailing slash from end
done
Есть ли способ объединить две команды в одном и иметь только printf в цикле for? (желательно, не прибегая к awk или sed, но нормально, если это неизбежно).
Я пробовал различные комбинации, но я заканчиваю ошибки «плохой замены». Например, printf "%s\n" "${niceName=${dir[$i]#"$baseDir"%"/"}"
не работает для меня.
Есть ли какой-либо причине вы используете 'для I в' и '$ {реж [$ я]} 'вместо' for i in '$ {dir [@]} "' и просто '$ i'? –
Вам не нужна обратная косая черта в определении массива; новые строки работают так же, как и пространства для разделения элементов массива. – chepner
Benjamin W: необходимо было легко получить индекс, но вы правы в общем случае. Хепнер: полезные наблюдения, спасибо! – knedas