¿Qué hace el setcomando sin argumentos?
Como puedo ver, imprime mis variables de entorno al igual que el envcomando pero en orden alfabético. Y además imprime información diferente (¿variables? ¿Funciones?) Como:
__git_printf_supports_v=yes
__grub_script_check_program=grub-script-check
...
quote ()
{
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
quote_readline ()
{
local quoted;
_quote_readline_by_ref "$1" ret;
printf %s "$ret"
}
¿Qué es y de dónde viene?
No puedo encontrar información sobre el setcomando sin argumentos. En realidad no tengo manpágina para setmi distribución de Linux en absoluto.

Respuestas:
setes un shell incorporado que muestra todas las variables de shell, no solo las de entorno, y también las funciones de shell, que es lo que está viendo al final de la lista.Las variables se muestran con una sintaxis que les permite establecerse cuando las líneas se ejecutan o se obtienen.
De
bashla página del manual :En diferentes capas, el comportamiento no es necesariamente el mismo; por ejemplo,
kshsetno muestra funciones de shell.fuente
kshque no almacena la definición de función en la variable de shell.Como
settiene salida ywhich setno devuelve nada, sabes que es parte del shell que estás utilizando, probablemente bash.man bash lo menciona muchas veces, pero es más fácil vincularlo en la documentación en línea .
set tiene la especificación de llamada de:
así que si quieres encontrarlo en man en la línea de comando puedes buscar con
fuente
which setDepende de tu caparazón. Al menoszshlo informará por usted. También puede leer esto para más detalles.setes un intérprete de comandos de shell , utilizado para establecer y desarmar opciones de shell y parámetros posicionales.Sin argumentos,
setimprimirá todas las variables de shell (tanto las variables de entorno como las variables en la sesión actual) ordenadas en el entorno local actual .También puedes leer la documentación de bash .
Hay algunas advertencias.
set "$var"asignarávarvalor a$1. Si$varcomienza con-o+, entonces el$varcontenido se trató como secuencias de opciones de shell. Si$varcontiene alguna opción no válida, la mayoría de los shells POSIX imprimirán el error.yashy ,zshen la emulación, no solo se imprime el error, sino que también se configuran opciones válidas. Mientras deja de configurar las opciones en la primera opción no válida, las asignará todas. En :shkshyashzshyashfyxse presentará en$-, mientras:solo
fpresente en$-. En ambos casos,fyxse presentará$-conzshinshykshemulación.Para protegerte de esa situación, puedes pasar
--como primer argumento para establecer el parámetro posicional incluso si comienza con-o+:asignará
$vara$1, independientemente de su contenido.set --sin ningún otro argumento se desarmará todos los parámetros posicionales.Si el primer argumento es
-, el comportamiento no está especificado. Todos los shells POSIX conocidos se desarmaránxy lasvopciones (exceptoposh), y asignarán cualquier cosa después-a los parámetros posicionales:asignará
-fa$1.set -tampoco desarmó parámetros posicionales. Schily Osh también se comportó así. Heirloom sh no desarmavyxopciones.La única excepción de shell POSIX es
yash, que se trata-como el primer parámetro posicional:Schily incluso no hace nada si está
-presente en los argumentos:fuente
set -- $unset,set - $unset,set $unsety,set "$unset"y así sucesivamente - por lo general aquellas discrepancias que conseguir que la gente en ese tipo de problemas en primer lugar.$unset.set $unsetactuará exactamente igual quesetpara una variable no establecida. Peroset "$unset"lo hará notar, si enunsetrealidad es una variable no establecida. Aset - $unsetelimina-vy-xestablece las opciones (en bash).unset_var. Y también tenga en cuenta que enset "$unset"realidad está configurado$1como vacío. Se trata de la expansión de shell, no estrictamenteset, así que no lo menciono.poshyyashson diferentes cuando-aparecen. Puedes leer mi actualización (y no dudes en mejorarla).Si está trabajando dentro de un shell bash, escriba
help set.Al final de la ayuda impresa, lea:
Entonces, un no argumentos
setimprime todas las variables conocidas por el shell.fuente
set -x; setsería útil