A veces es necesario emular y verificar las variables anteriores en pequeños ejemplos y luego se puede copiar de inmediato a algún script, etc.
Traté de resolver usando un ejemplo simple de las siguientes maneras:
(find $1) /tmp
sh -c '(find $1) /tmp'
sh -c "find $1" /tmp
echo '(find $1) /tmp' | sh
y con otras combinaciones. También experimentó agregando la directiva del intérprete shebang #!/bin/sh -x, pero no obtuvo el resultado deseado.
¿Puedo hacer esto simplemente?

(find $1) /tmpes un error de sintaxis En realidad(any-command) more-argumentses un error de sintaxis. ¿Puedes explicar de manera diferente lo que estás tratando de hacer?rcfamilia (rc,es,akanga...), donde en ese caso que es equivalente afind $1 /tmp.Respuestas:
El primer argumento después
sh -c inline-scriptva a$0(que también se usa para mensajes de error), y el resto entra$1,$2...Entonces quieres:
(en los viejos tiempos, podías encontrar
shimplementaciones donde entró el primer argumento$1, así que harías:O:
para tener en cuenta ambos comportamientos, pero esos depósitos han desaparecido ahora que POSIX es frecuente y está disponible públicamente).
Si desea establecer
$1,$2en un ámbito local dentro del shell actual, allí es donde usaría las funciones. En conchas tipo Bourne:Algunos shells admiten funciones anónimas. Ese es el caso de
zsh:O
es:Para cambiar los parámetros posicionales actuales, de forma permanente, la sintaxis depende del shell. dchirikov ya ha cubierto el Bourne como conchas (Bourne, Korn
bash,zsh, POSIX,ash,yash...).La sintaxis es:
Sin embargo, necesitas:
Para vaciar esa lista (o
shift "$#") yestablecer
$1algo que comience con-o+, por lo que es un buen hábito usar siempreset --especialmente cuando se usan datos arbitrarios, comoset -- "$@" other-argagregar argumentos al final de la lista de parámetros posicionales.En shells de la
cshfamilia (csh,tcsh), asigna a laargvmatriz:En los depósitos de la
rcfamilia (rc,es,akanga), a la*matriz:Aunque también puede asignar elementos individualmente:
En
fish, los parámetros posicionales están en laargvmatriz solamente (sin$1,$@allí):En
zsh, por compatibilidad concsh, también puede asignar a laargvmatriz:Y también puedes hacer:
Eso significa que también puedes hacer cosas como:
para agregar un argumento al final, y:
para eliminar un argumento del final o del medio, lo que no puede hacer fácilmente con otros shells.
fuente
es lo que necesitas:
fuente