Почему значение этой строки в bash-скрипте выполняется? - PullRequest
3 голосов
/ 13 марта 2010

Почему этот скрипт выполняет строку в выражении if:

#!/bin/bash
FILES="*"
STRING=''

for f in $FILES
do
  if ["$STRING" = ""]
   then
    echo first
    STRING='hello'
   else
    STRING="$STRING hello"
  fi
done

echo $STRING

при запуске с sh script.sh выводит:

first
lesscd.sh: line 7: [hello: command not found
lesscd.sh: line 7: [hello hello: command not found
lesscd.sh: line 7: [hello hello hello: command not found
lesscd.sh: line 7: [hello hello hello hello: command not found
lesscd.sh: line 7: [hello hello hello hello hello: command not found
hello hello hello hello hello hello

ps первая попыткасценарий оболочки
спасибо

Ответы [ 2 ]

6 голосов
/ 13 марта 2010

Вы пытаетесь выполнить команду [hello. Поставьте пробел после [, чтобы он был распознан как тест.

for f in $FILES
do
  if [ "$STRING" = "" ]
   then
    echo first
    STRING='hello'
   else
    STRING="$STRING hello"
  fi
done
2 голосов
/ 16 марта 2010

Предполагая, что строка 'echo first' предназначена только для отладки, вы можете добиться того же с помощью:

STRING=$STRING${STRING:+ }hello

(то есть приведенная выше строка выдаст тот же результат, что и ваш оператор if, но не будет отображать 'first') *

Выражение '$ {STRING: +}' ничего не вычисляет, если $ STRING пусто или равно нулю, а в противном случае - пробел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...