Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:
Вы пытаетесь использовать ссылочную переменную, значение которой
Nothing
/null
. Если для ссылочной переменной значениеNothing
/null
, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную
blockquote>Nothing
/null
, или вы вызывали функцию, которая установите для этой переменной значениеNothing
/null
.
Удаленный ответ был на правильном пути. Небольшая модификация вашей попытки:
shopt -s extglob
MYDIR="./images"
OTHERDIR="./images/junk"
SUFFIXES='@(pdf|eps|jpg|svg)'
mv "$MYDIR/"*.$SUFFIXES "$OTHERDIR/"
Расширение скобки выполняется до расширения переменной, но расширение переменной выполняется до расширения имени пути. Таким образом, фигурные скобки по-прежнему являются фигурными скобками, когда переменная расширяется в вашем оригинале, но когда переменная вместо этого содержит элементы pathname, они уже были расширены, когда расширение пути будет выполнено.
Вам нужно будет оценить эту строку, чтобы она работала так:
MYDIR="./images"
OTHERDIR="./images/junk"
SUFFIXES='{pdf,eps,jpg,svg}'
eval "mv \"$MYDIR\"/*.$SUFFIXES \"$OTHERDIR/\""
Теперь у этого есть проблемы, в частности, если вы не доверяете $SUFFIXES
, он может содержать инъекционную атаку, но для этого простого случая это должно быть хорошо.
Если вы открыты для других решений, вы можете поэкспериментировать с find
и xargs
.