2014-12-01 11 views
2

флаг по умолчанию всегда будет равен ни одному, ни [0-9], если флаг по умолчанию равен [0-9], тогда track_number равен 1, но если track_number не равно ничего тогда track_number не равно ничего

default_flag=$(mkvmerge --identify-verbose video.mkv | awk -F'[ :]+' '$4=="subtitles"&&/default_track:1[[:space:]]/{print $3}') 

По какой-то причине это не работает:

if [ -s $default_flag ]; then track_number=""; else track_number="1"; fi 
+0

«... но если track_number ничего не значит, то track_number ничего не значит» .... Ну, да. Это будет правдой на подавляющем большинстве компьютерных языков, с которыми вы когда-либо работали. Системы, не демонстрирующие рефлексивные свойства на равенстве, довольно редки, и с ними трудно работать ... – twalberg

ответ

3

Это условие является проблема:

if [ -s $default_flag ]; 

По man test:

-s FILE 
      FILE exists and has a size greater than zero 

Здесь вы просто проверка на пустую строку, так что используйте -z

Вы можете сделать:

[[ -z "$default_flag" ]] && track_number="" || track_number="1" 
0

Самым простым решением является использование параметра замещения:

track_number=${default_flag:+1} 

выражение в правой части точно означает: «Если default_flag не задан или пустая строка, то пустая строка, иначе строка 1».

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