2015-10-29 5 views
0

У меня есть сценарий оболочки, который я пытаюсь записать в файл с использованием нескольких переменных, но один из них игнорируется.Как передать несколько переменных в сценарии оболочки

#!/bin/bash 

dir=/folder 
name=bob 
date=`date +%Y` 

command > $dir/$name_$date.ext 

The $name игнорируется. Как я могу это исправить?

+8

Использование: 'command>" $ {dir}/$ {name} _ $ {date} .ext "' – anubhava

+1

'set -u' может быть хорошей идеей. – Biffen

+2

В вашем коде используется имя var 'name_'. Если вы не можете изменить последнюю строку в полях с помощью '{}', вы можете работать с 'name_ = bob_'. –

ответ

4

Вы заметили, что _ был «проигнорирован»? Это большой намек.
Если вы используете set -u, вы увидите следующее:

-bash: name_: unbound variable 

Путь Баш разбирает его, подчеркивание является частью имени переменной.

Существует несколько способов устранения проблемы.
Самый чистый - это конструкция ${var}, которая отделяет имя переменной от ее окружения.
Вы также можете использовать цитаты различными способами, чтобы заставить правильный синтаксический анализ и т.д .: "$dir/$name""_$date.ext"

И в случае, если ваши переменные могут содержать пробелы (в настоящее время или в будущем) использовать цитату слова.

command >"$dir/${name}_$date.ext" 
command >"${dir}/${name}_${date}.ext" 

Оба эти качества, просто выберите один стиль и придерживайтесь его.

+0

Ах, забыл, что _ может быть частью переменной. Благодаря! – user1052448

Смежные вопросы