Слишком много аргументов, вызванных подстановочными знаками - PullRequest
1 голос
/ 18 июля 2011

Я написал сценарий оболочки, и часть сценария завершилась неудачно, и в нем было слишком много аргументов:

if [ -f ABC_DEF_*.* ]; then

Я хочу проверить, есть ли какие-либо такой файл соответствует строке, но оболочка жалуется, что слишком много аргументов.В каталоге есть 20 таких файлов.

Будет ли оболочка расширена подстановочным знаком и превратит ABC_DEF_ . в список из 20 имен файлов?Если да, как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 17 января 2013

Вы можете использовать [ -f <filename with wildcard> ]. Он возвращает истину, если существует один или несколько файлов, которые соответствуют имени файла с подстановочным знаком, с оговоркой, если существует больше файлов, которые соответствуют, чем может использовать оператор if, он выдает ошибку «too many» и не выполняет операторы в блок if. Если оператор if равен [ ! -f <filename with wildcard> ], он будет работать, как и ожидалось, во всех случаях. Сказав это, ваше решение работает для желаемого поведения оператора (и не меняет логику при возникновении ошибки).

1 голос
/ 18 июля 2011

Проблема в том, что вы не можете использовать [ -f <more then one> ].Это даже не имеет смысла: возвращает ли true, когда все файлы существуют или когда существует хотя бы один файл?

, если вы хотите проверить существование, выполните NUM=$(ls <pattern>|wc -l)

...