4

Я выбираю 4 файла в Nemo по пути /home/myUsername/.local/share/nemo/scripts/Folder with spaces/ . Nemo сохраняет пути к файлам в переменной среды NEMO_SCRIPT_SELECTED_FILE_PATHS .

(Как вы можете видеть в ответе glenn jackman ниже, NEMO_SCRIPT_SELECTED_FILE_PATHS содержит разделенный новой строкой список путей к файлам.)

Почему "Да!"не печатается после каждой строки пути к файлу? Как я могу этого достичь? (Этот вопрос, возможно, раздражает, потому что я изначально думал, что этот список путей к файлам является массивом, который, очевидно, не является.)

SCRIPT

#!/bin/bash

for i in "${NEMO_SCRIPT_SELECTED_FILE_PATHS[@]}"
do
    echo "$i"
    echo "Yeah!"
done

ВЫХОД

/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script1
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script2
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script3
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script4

Yeah!

1 ответ1

6

Предполагая, что:

  • переменная окружения $NEMO_SCRIPT_SELECTED_FILE_PATHS каким-то волшебным образом установлена для вас с помощью nemo, и
  • он содержит разделенный новой строкой список имен файлов,

вы можете разобрать его в массив bash следующим образом:

$ NEMO_SCRIPT_SELECTED_FILE_PATHS="file one
file two
file three"

$ mapfile -t files <<<"$NEMO_SCRIPT_SELECTED_FILE_PATHS"

$ echo ${#files[@]}
3

$ printf ">>%s\n" "${files[@]}"
>>file one
>>file two
>>file three

mapfile - это встроенная команда bash, которая читает стандартный ввод, разбивает на новые строки и сохраняет строки в именованном массиве.

Это ломается, если любое из ваших имен файлов содержит символы новой строки (что является допустимым символом имени файла).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .