2013-04-17 4 views
1

Я пытаюсь извлечь имена файлов с расширением .url с использованием $name =~ s/\.url$//; Однако некоторые из имен содержат восклицательный знак перед расширением, например:.Баш: .url ": событие не найдено при извлечении имен файлов

"for example-this!.url" "and-something-else!.url" 

Это приводит к Perl, чтобы генерировать ошибку и прекратить работы:

bash: !.url": event not found 

есть ли способ преодолеть эту проблему Ниже показана часть соответствующего кода, который я использую:

foreach my $f (@ARGV) { 
my (undef, $dir, $name) = File::Spec->splitpath($f); 
$name =~ s/\.url$//; 
+0

Одиночные кодовые имена файлов? – Koterpillar

+0

@ Koterpillar, я не могу, потому что некоторые имена файлов уже содержат одинарные кавычки. –

+0

Есть ли имена файлов, которые содержат двойные кавычки? – Koterpillar

ответ

2

error, который вы получаете, происходит, когда расширение истории включено (что является значением по умолчанию).

Для того, чтобы отключить, сделать

set +o histexpand 

в командной строке.

+0

Спасибо большое! Это решает. –

1

Ошибка не из perl, а из bash. Вы можете захотеть сохранить имена файлов в файле и прочитать их оттуда. Обратите внимание, что эта проблема возникает только тогда, когда bash анализирует ваш ввод в командной строке. Когда скрипт читает имена файлов из файла, трубы и т. Д., Проблем не будет.

+0

Я вижу .. Извините, я только начинаю изучать perl. Можете ли вы показать мне, как переносить его на переменную @ARGV. Благодарю. –

Смежные вопросы