Назад | Перейти на главную страницу

Что не так со следующим сценарием bash?

Я написал следующую строку в своем скрипте, но она не присвоила никакого значения переменной a

a= grep -n mark /etc/samba/smb.conf |cut -d: f1

Я разрезаю номер строки, где строка метки присутствует в smb.conf в переменной a. Но значение переменной равно нулю. В чем может быть проблема

Две вещи:

  1. Между именем переменной не должно быть пробелов, = сигнал и значение переменной
  2. Если вы хотите поместить результаты команды или серии команд в переменную, вы должны заключить ее в $(command) или обратные кавычки в старом стиле. Обе строки ниже верны и делают то же самое:

    a=`commands`
    a=$(commands)
    

Итак, ваша линия должна быть

a=$(grep -n mark /etc/samba/smb.conf |cut -d: f1)

Есть некоторые различия в том, как объединить использование обратных кавычек или нового стиля. $(), чек этот вопрос на SO чтобы увидеть хороший ответ.

Попробуйте вместо этого

a=$(grep -n mark /etc/samba/smb.conf |cut -d: f1)

Или вместо $ () вы можете использовать обратные кавычки (которые здесь включают красивый вид кода)

a=`grep -n mark /etc/samba/smb.conf |cut -d: -f1`

Должно быть =$( ... ) или

a=` … `

Может быть, попробовав вот так вырезать:

a=`grep -n mark /etc/samba/smb.conf |cut -d: -f1`