Probé varias formas de lo siguiente en un script bash:
#!/bin/bash
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Pero no puedo hacer que la sintaxis expanda correctamente la COLUMNSvariable de entorno.
Probé varias formas de lo siguiente:
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W $COLUMNS'
y
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W ${COLUMNS}'
y
eval svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Sugerencias
bash
quotes
environment
Jamie
fuente
fuente

svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W ""$COLUMNS"$@comillas lo hace exactamente igual que$*, lo que quiere decir que se divide"foo bar"en dos argumentos separados,fooybar. Si desea conservar la lista de argumentos original tal como se le proporcionó, lo desea"$@".Respuestas:
Si no está seguro, puede usar la solicitud 'cols' en la terminal y olvidar COLUMNAS:
fuente
Solo una nota / resumen rápido para cualquiera que haya venido aquí a través de Google en busca de la respuesta a la pregunta general formulada en el título (como yo). Cualquiera de los siguientes debería funcionar para obtener acceso a las variables de shell entre comillas:
El uso de comillas simples es el problema principal. Según el Manual de referencia de Bash :
En el caso específico planteado en la pregunta, $ COLUMNS es una variable especial que tiene propiedades no estándar (consulte la respuesta de lhunath arriba).
fuente
'before'"$variable"'after'(como se indica en esta respuesta: stackoverflow.com/a/13802438/2254346 )Tenga en cuenta que
COLUMNSes:SIGWINCHseñal.Ese segundo punto generalmente significa que su
COLUMNSvariable solo se establecerá en su shell interactivo , no en un script bash.Si su script
stdinestá conectado a su terminal, puede buscar manualmente el ancho de su terminal preguntando a su terminal:Y para usar esto en su comando SVN:
(Nota: debe cotizar
"$@"y mantenerse alejado deeval;-))fuente
El siguiente script me funciona para múltiples valores de
$COLUMNS. Me pregunto si no está configurandoCOLUMNSantes de esta llamada.¿Puedes hacer eco
$COLUMNSdentro de tu secuencia de comandos para ver si está configurado correctamente?fuente
$@- que divide un solo parámetro"two words"en dos parámetros separados,twoywords. Debería"$@"pasar la lista de argumentos exactamente como se le dio.Lo está haciendo bien, así que supongo que algo más tiene la culpa (¿no exportar COLUMNAS?).
Un truco para depurar estos casos es hacer un comando especializado (un cierre para los chicos del lenguaje de programación). Cree un script de shell llamado diff-columnas haciendo:
y solo usa
De esta manera, su código es más limpio de leer y más modular (enfoque de arriba hacia abajo), y puede probar el código de columnas de diferencias completamente por separado (enfoque de abajo hacia arriba).
fuente