Embora eu ache estranho que você esteja comparando uma variável com algo que você apenas define, a questão principal é que você está usando um operador de comparação numérica (-ne) para o que é esperado para ser um nome de arquivo (de texto). Em vez disso, use:
if [ "$filename" != "$1" ]
... onde eu também citou suas variáveis .
O bônus aponta para o comentário da steeldriver , o que me levou a olhar um pouco mais sobre isso.
Com base em meus testes, acredito que o ksh veja o operador de comparação ne numérico e esteja realizando uma rodada de variáveis & expansão aritmética nos dois operandos $filename e $1 . Como tal, $filename se transforma em test.txt , que o ksh reconhece como um possível compound variable . Como test não está definido, você recebe o erro test.txt: no parent .