POSIX sh equivalente para printf% de Bash q

Suponha que eu tenha um#!/bin/sh script que pode ter uma variedade de parâmetros posicionais, alguns dos quais podem incluir espaços, ambos / ambos os tipos de citações, etc. Eu quero iterar"$@" e para cada argumento, processe-o imediatamente de alguma forma ou salve-o para mais tarde. No final do roteiro eu quero lançar (talvezexec) outro processo, passando alguns desses parâmetros com todos os caracteres especiais intactos.

Se eu não estivesse fazendo nenhum processamento nos parâmetros,othercmd "$@" funcionaria bem, mas preciso extrair alguns parâmetros e processá-los um pouco.

Se eu pudesse assumir Bash, então eu poderia usarprintf %q calcular versões citadas de args que eu poderiaeval mais tarde, mas isto não funcionaria em, e. Traço do Ubuntu (/bin/sh).

Existe algum equivalente aprintf %q que pode ser escrito em um shell script Bourne simples, usando apenas utilitários integrados e definidos por POSIX, como uma função que eu poderia copiar em um script?

Por exemplo, um script tentandols seus argumentos na ordem inversa:

#!/bin/sh
args=
for arg in "$@"
do
    args="'$arg' $args"
done
eval "ls $args"

funciona para muitos casos:

$ ./handle goodbye "cruel world"
ls: cannot access cruel world: No such file or directory
ls: cannot access goodbye: No such file or directory

mas não quando' é usado:

$ ./handle goodbye "cruel'st world"
./handle: 1: eval: Syntax error: Unterminated quoted string

e o seguinte funciona bem, mas depende do Bash:

#!/bin/bash
args=
for arg in "$@"
do
    printf -v argq '%q' "$arg"
    args="$argq $args"
done
eval "ls $args"

questionAnswers(4)

yourAnswerToTheQuestion