Как разобрать переменное количество аргументов командной строки с кавычками в Eval? - PullRequest
0 голосов
/ 06 марта 2019

У меня есть этот простой скрипт:

#!/usr/bin/env bash
eval "${@:2}"

while [ true ]
do
    FocusApp=`xdotool getwindowfocus getwindowname`

    if [[ "$FocusApp" == *"$1"* ]];
    then
        wmctrl -ir $(xdotool getactivewindow) -b add,maximized_vert,maximized_horz
        break
    fi
done

Я запускаю его так:

$ ./maximize.sh "Sublime Text" /usr/bin/subl -n "./My File With Spaces in the Name"

Но когда я его запускаю, Sublime Text пытается открыть файл с именем My, другой с именем File и т. д. Если я заменим eval "${@:2}" на:

eval "\"$2\" \"$3\" \"$4\" \"$5\" \"$6\" \"$7\" \"$8\""

Затем Sublime Text правильно откроет файл "./My File With Spaces in the Name".Как заставить eval правильно понимать все кавычки аргументов с переменным числом аргументов командной строки, т. Е. Без жесткого кодирования "\"$2\" \"$3\" \"$4\" ..."?

1 Ответ

2 голосов
/ 06 марта 2019

Проще просто оставить eval вне этого:

#!/usr/bin/env bash
"${@:2}"

Пример:

$ ./myscript "Demo" 'printf' 'This is one argument: %s\n' 'One long arg' 'Another, with * and such'
This is one argument: One long arg
This is one argument: Another, with * and such
...