Eu acredito que isso faz o que você quer. Ele colocará todos os argumentos em uma string, separados por espaços, com aspas simples ao redor de todos:
str="'$*'"
$*
produz todos os argumentos de scripts separados pelo primeiro caractere de $IFS
, que, por padrão, é um espaço.
Dentro de uma string com aspas duplas, não há necessidade de escapar de aspas simples.
Exemplo
Vamos colocar o acima em um arquivo de script:
$ cat script.sh
#!/bin/sh
str="'$*'"
echo "$str"
Agora, execute o script com argumentos de amostra:
$ sh script.sh one two three four 5
'one two three four 5'
Este script é POSIX. Ele funcionará com bash
, mas não exige bash
.
Uma variação: concatenando com barras em vez de espaços
Podemos mudar de espaços para outro caractere ajustando IFS
:
$ cat script.sh
#!/bin/sh
old="$IFS"
IFS='/'
str="'$*'"
echo "$str"
IFS=$old
Por exemplo:
$ sh script.sh one two three four
'one/two/three/four'