Предоставление аргумента команде после замены

Я пытаюсь взять имя файла из папки ~/Pictures и предоставить его в качестве аргумента для команды nomacs . Имя файла содержит пробелы, поэтому я использую подстановку Bash в escape-пространства (я также хочу взять последний файл в папке).

Код:

 names=$(\ls ~/Pictures * | tac) SAVEIFS=$IFS IFS=$'\n' names=($names) IFS=$SAVEIFS screenshot=~/Pictures/${names[0]} screenshot=${screenshot// /\\ } nomacs $screenshot 

Пример имени файла: Screenshot from 2017-09-13 18-05-42.png

Проблема в том, что nomacs $screenshot не работает, но когда я выполняю nomacs Screenshot\ from\ 2017-09-13 18-05-42.png , он работает так, как ожидалось.

Должен ли я использовать специальную технику Bash для экранирования пробелов?

One Solution collect form web for “Предоставление аргумента команде после замены”

Из того, что я собираю из вашего скрипта, вы меняете вывод ls и выбираете первый элемент. Вот еще один способ сделать это с помощью bash:

 files=(~/Pictures/*) nomacs "${files[-1]}" 

Это заполняет массив с расширением glob ~/Pictures/* затем передает последний элемент в программу nomacs .

  • Квадратный кронштейн квадратной скобки A ^ [[A - Что это значит?
  • LS_COLORS для 256-цветного терминала
  • Как использовать меньше в скрипте без получения ESC escape-символов?
  • Код Escape для изменения формы курсора
  • Как использовать '(' токен при его использовании для поиска с помощью ag / awk?
  • Здесь-документ без интерпретации escape-последовательностей, но с интерполяцией
  • Обратный код управления ищет терминалы
  • Как правильно избежать этого слова на vim?
  • Скопируйте скобки в PS1
  • Скрыть и отобразить курсор с помощью tput
  • unescape pipe в параметрах
  • Linux и Unix - лучшая ОС в мире.