Basierend auf der Antwort von Peter Lyons, aber auch Anführungszeichen innerhalb von Argumenten zulassen:
#!/bin/bash
QUOTE_ARGS=''
for ARG in "example@unixlinux.online"
do
ARG=$(printf "%q" "$ARG")
QUOTE_ARGS="${QUOTE_ARGS} $ARG"
done
ssh example@unixlinux.online "printf ${QUOTE_ARGS}"
Dies funktioniert für alles, was ich bisher getestet habe, außer für Zeilenumbrüche:
$ /tmp/wrap_printf "[-%s-]" "hello'\$t\""
[-hello'$t"-]
#!/bin/sh
QUOTE_ARGS=''
for ARG in "example@unixlinux.online"
do
QUOTE_ARGS="${QUOTE_ARGS} '${ARG}'"
done
ssh example@unixlinux.online "${QUOTE_ARGS}"
Dies funktioniert für Leerzeichen. Es funktioniert nicht, wenn das Argument ein eingebettetes einfaches Anführungszeichen enthält.
Das richtige Zitieren ist ziemlich schwierig und es in Bash (auf allgemeine und robuste Weise) fast unmöglich.
Verwenden Sie Perl:
#!/usr/bin/perl
use Net::OpenSSH;
my $ssh = Net::OpenSSH->new('example@unixlinux.online');
$ssh->system('printf', @ARGV);