Да, ваша интерпретация верна (после беглого просмотра вашего длинного вопроса ).
Флаги расширения параметров применяются к расширениям параметров. Если вы хотите, чтобы он применялся к любой произвольной строке, вам нужно либо сохранить эту строку в переменной, как в:
var=%1N
filename=${(%)var}
Или (как хак )можно использовать расширение параметра ${var:-string}
и оставить часть var
пустой:${(%):-%1N}
. Это обычный трюк (см.1 2 3 4 5 6 7 8 9 10 11 12 13здесь, например ), хотя это делает довольно неразборчивый код. В качестве альтернативы вы можете использовать синтаксис ${param+string}
и использовать такой параметр, как $-
, $0
или $#
, который всегда установлен(${(%)-+%1N}
). Это не короче и не более разборчиво.
Здесь также можно использоватьprint -P %1N
Хорошо, частичный ответ:
Виртуальная машина видит только предоставленное ей оборудование. Это может быть «настоящее» оборудование, «украденное» с физической машины, на которой работает виртуальная машина, или это может быть «симулированное» оборудование, такое как USB-концентратор и мышь VMware.
Не зная вашей ситуации, предполагая, что USB-устройство чтения смарт-карт подключено к физической машине, оно вообще не будет отображаться на виртуальной машине, если только оно не назначено этой машине.
Поэтому вам нужно попросить того, кто управляет виртуальной машиной, назначить ее вашей машине.