Предоставление замены Bash в качестве аргумента функции

Команда psможет показать вам время начала или прошедшее время:

$ ps -O start,lstart,etime
  PID  STARTED                  STARTED     ELAPSED S TTY          TIME COMMAND
 7827 15:18:42 Tue Aug  1 15:18:42 2017       00:00 R pts/12   00:00:00 ps -O
10413   Jul 16 Sun Jul 16 17:36:12 2017 15-21:42:30 S pts/12   00:00:07 bash
1
17.07.2019, 09:38
1 ответ

Чтобы сделать это буквально, вам, вероятно, придется прибегнуть к eval:

function subst_all_filenames() {
    subst="$1"
    for filename in *
    do
        eval 'echo ${filename'"$subst"'}'
    done
}

subst_all_filenames "^^"
subst_all_filenames ",,"
subst_all_filenames ""

В качестве альтернативы можно поддерживать только известный список замен:

function subst_all_filenames() {
    case "$1" in
      ^^) for filename in *; do echo "${filename^^}"; done ;;
     ,,) for filename in *; do echo "${filename,,}"; done ;;
       *) printf "%s\n" * ;;
    esac
}

Иногда такая вспомогательная функция вообще не нужна. Вполне нормально иметь такие циклы повсюду в сценарии оболочки.

1
28.01.2020, 00:06

Теги

Похожие вопросы