Você não pode testar um arquivo com um regex nem com um glob assim. Você precisa fazer uma iteração nos arquivos:
for file in /Applications/xml[0-9].pl; do if [ -f "$file" ]; then ...
Aqui está o meu código:
if [ -f /Applications/xml[0-9].pl ]
Eu também tentei com -f =~
e colchetes duplos, mas nenhum parece funcionar.
Eu primeiro que o regex pode estar com defeito, mas eu tentei isso.
echo h1 | sed 's/h[0-9]/h/'
E isso funcionou. O que estou fazendo errado aqui?
Você não pode testar um arquivo com um regex nem com um glob assim. Você precisa fazer uma iteração nos arquivos:
for file in /Applications/xml[0-9].pl; do if [ -f "$file" ]; then ...
o bash expande a expressão regular antes de avaliar a condição. Se o seu diretório tiver três arquivos pelo nome
/Applications/xml0.pl
/Applications/xml1.pl
/Applications/xml2.pl
sua declaração if
parece ser shell como
if [ -f /Applications/xml0.pl /Applications/xml1.pl /Applications/xml2.pl ]]
que está sintaticamente incorreto. Você precisará especificar o nome do arquivo completamente quando quiser procurar por sua existência usando
for file in /Applications/xml[0-9].pl
do
if [ -f ${file} ]
ou, se puder, use o comando find
para fazer o que quiser com o arquivo.
Tags bash files regular-expression