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