2015-10-12 1 views
2

При проверке существования команды,-n избыточно в командных тестах -v?

[ -n "$(command -v foo)" ] 

и

[ "$(command -v foo)" ] 

кажется, функционально эквивалентны, но большинство примеров, которые я видел, включают в себя тест -n явно. Я полагаю, что если команда не существует, что эквивалентно:

[ "" ] 

Это плохая практика, чтобы опустить -n?

+2

Да (я бы рассматривать это как плохая практика), но вы, вероятно, безопасно, если вы сделаете привычку искать имена команд нечетного мяч, который можно было бы спутать с вариантами 'test' (aka' ['). И это должно было быть довольно странным, чтобы он мог вызвать проблемы; Я не могу представить, как вы получите, например, '-z' from' command -v ... '. –

ответ

3

Независимо от использования -n или нет, вы тестируете выход встроенного command. Я бы проверить это возвращаемое значение:

if command -v "$cmd" >/dev/null 2>&1 ; then 
    echo "command $cmd exists" 
fi 
+0

Отлично. Благодаря! –

+2

Иногда, когда его просят выбрать между A или B, ответ C! :). Однако для обобщения вашего вопроса о '-n' и тестирования пустой строки; В большинстве (или даже всех) случаях должно быть хорошо опустить '-n'. Тем не менее, как можно яснее, насколько это возможно, гарантируется безопасность во всех случаях и улучшает читаемость. – hek2mgl

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