traduccion - se espera un operador unario en el script de shell al comparar un valor nulo con una cadena
shell usa price (2)
¿Por qué todas las personas quieren usar ''=='' en lugar de simple ''=''? ¡Es un mal hábito! Se usa solo en la expresión [[]]. Y en (()) también. ¡Pero puedes usar solo = también! Funciona bien en cualquier caso. Si usas números, no las cadenas, no utilices el parcelamiento de las cadenas y luego las compares como las cadenas, sino que compares los números. como eso
let -i i=5 # garantee that i is nubmber
test $i -eq 5 && echo "$i is equal 5" || echo "$i not equal 5"
Es un partido mejor y más rápido. Soy experto en C / C ++, Java, JavaScript. Pero si uso bash nunca uso ''=='' en su lugar ''=''. ¿Por qué lo haces?
Tengo dos variables
var=""
var1=abcd
Aquí está mi código de shell script
if [ $var == $var1 ]; then
do something
else
do something
fi
Si ejecuto este código me avisará
[: ==: unary operator expected
¿Como puedo resolver esto?
Dado que el valor de $var
es la cadena vacía, esto:
if [ $var == $var1 ]; then
se expande a esto:
if [ == abcd ]; then
que es un error de sintaxis.
Necesitas citar los argumentos:
if [ "$var" == "$var1" ]; then
También puedes usar =
lugar de ==
; Esa es la sintaxis original, y es un poco más portátil.
Si está utilizando bash, puede usar la [[
sintaxis, que no requiere las comillas:
if [[ $var = $var1 ]]; then
Incluso entonces, no se pierde nada con citar la referencia de variable y agregar comillas:
if [[ "$var" = "$var1" ]]; then
podría salvar a un futuro lector un momento tratando de recordar si [[
]]
requiere.