paste -d aceita um argumento obrigatório.
Veja a página de manual
-d, --delimiters=LIST
reuse characters from LIST instead of TABs
Este formato realmente significa
-d LIST or --delimiters=LIST
reuse characters from LIST instead of TABs
Portanto, com paste -d file1 , você está definindo LIST para file1 e nenhum nome de arquivo é especificado. E como a man page diz:
With no FILE, or when FILE is -, read standard input.
Com paste -ds file1 , você está definindo um delimitador para s . Você teria que fornecer vários arquivos para ver o efeito.
Compare
$ paste <(printf 'foo\nbar\n') <(printf 'one\ntwo\n')
foo<TAB>one
bar<TAB>two
$ paste -ds <(printf 'foo\nbar\n') <(printf 'one\ntwo\n')
foosone
barstwo