Você pode substituir o valor de $i
in para ver o comando exato que está tentando executar:
app4/ | sed -e "s/^.*\(.\)$//"
Isso não funciona porque app4/
não é um comando. Você está tentando canalizar app4/
para sed
, então você precisa usar algo que produza app4/
:
echo app4/ | sed -e "s/^.*\(.\)$//"
Isso funciona, mas você não precisa usar sed
para isso; bash
tem algumas ferramentas de manipulação de strings. Por exemplo, ${i#}
fornecerá o comprimento de $i
e ${i:j}
fornecerá uma substring a partir de j
, por isso ${i:$((${i#}-1))}
fornecerá o último caractere.
A maneira mais fácil de fazer o que você está tentando é provavelmente com ${i%/}
. Isso retornará $i
, mas removerá um /
do final, se houver um:
$ i="app4"; echo ${i%/}
app4
$ i="app4/"; echo ${i%/}
app4
Assim:
if [ "${i%/}" = "$i" ]
then
echo "file"
else
echo "folder"
fi
No entanto, se tudo que você realmente quer é saber se $i
é um diretório válido, você pode simplesmente usar:
if [ -d "$i" ]