No son lo mismo. De hecho [ "$first_arg" == "major" || "$first_arg" == "minor" ]
ni siquiera es una expresión válida.
Esto se debe a que [
es un comando equivalente a test
y no pueden usar la alternativa ||
, que opera en el nivel de comando inter -. Lo que históricamente podría considerarse correcto para la alternativa es -o
, pero ahora está marcado como obsoleto por POSIX1 , que aconseja reescribir
test "$1" -o "$2"
en
test "$1" || test "$2"
Además de las construcciones test
y [
, también existe el comando de prueba "moderno" [[
, que a su vez no acepta -o
por completo, sino que acepta ||
.
Por lo tanto, todos estos son válidos y equivalentes:
Una [[
prueba:
if [[ $first_arg == major || $first_arg == minor ]]; then
exit 1;
fi
Dos [[
pruebas:
if [[ $first_arg == major ]] || [[ $first_arg == minor ]]; then
exit 1;
fi
Dos [
pruebas (el equivalente estándar):
if [ "$first_arg" = major ] || [ "$first_arg" = minor ]; then
exit 1;
fi
Las comillas dobles alrededor de $first_arg
no son necesarias dentro de [[
, ya que no hay división de palabras ni expansión de nombre de ruta allí. Sin embargo, las comillas deben usarse con [
. Y tampoco tiene sentido citar minor
ni major
. No solo aquí, sino también con test
o [
. Eso es porque son cadenas simples.
1. Ver USO DE LA APLICACIÓN.
export PS1=$(displayPS1);
Это запустит displayPS1
и операторы if
внутри один раз , присвоив результат подсказке. После этого условия больше не обрабатываются.
Вместо этого поместите вызов функции в PROMPT_COMMAND
, чтобы он вызывался каждый раз, когда будет напечатано приглашение. Так что либо
PROMPT_COMMAND='PS1=$(displayPS1)'
или, скорее,
PROMPT_COMMAND=setPS1
и сделайте setPS1
функцией, которая устанавливает саму PS1
. (Избавление от подстановки команд сохраняет ответвление от вызова подоболочки каждый раз, когда изменяется подсказка.)
Используйте кавычки.
PS1='$(displayPS1)'
Если этого не сделать, функция оценивается во время назначения.