2015-04-25 4 views
1

Я создал сценарий bash. Назовем это «runner.sh». Внутри я запускаю omxplayer с некоторыми флагами.Почему Bash не распознает мою переменную как строку?

omxplayer $TARGETFOLDER/*.mp4 

Это прекрасно работает. Теперь давайте изменим размер и положение видео.

omxplayer —win "0 0 640 480" $TARGETFOLDER/*.mp4 

Это тоже хорошо работает. Теперь давайте попробуем поставить «флаг победы» в переменную. Я избегаю цитаты.

SizeAndPosition="—win \"0 0 640 480\"" 

Хорошо, теперь я это пробовал.

Нет, не работает. Я получаю ошибку Файл «0» не найден. Чтобы быть уверенным, я печатаю всю команду на экран.

echo "omxplayer $SizeAndPosition $TARGETFOLDER/*.mp4" 

... и я получаю выход ...

omxplayer —win "0 0 640 480" /homefolder/*.mp4 

Почему он не распознает переменный, как и любую другую строку в команде? Могу ли я что-то сделать?

EDIT: Извините за путаницу. Вопрос о SizeAndPosition, почему это не рассматривается как аргумент?

+0

Как 'TARGETFOLDER' определено? (обратите внимание: вы действительно должны помещать кавычки вокруг '$ TARGETFOLDER' в' '$ TARGETFOLDER '/ *. mp4' в случае, если в нем есть пробелы. Это была проблема, но это могло бы испортиться по-другому.) – Wintermute

+0

Не уверен, что это имеет какое-то значение, но не должно быть следующего: '--win 'x1 y1 x2 y2" ', обратите внимание на' '' '' '' '' перед 'win'? – user3439894

+0

Думаю, я в замешательстве. Возникает вопрос, почему '$ TARGETFOLDER' не расширен или почему' $ SizeAndPosition' не рассматривается как два отдельных аргумента? – Wintermute

ответ

3

Вместо storing the command arguments in a variable, использовать массив:

SizeAndPosition=(-win '0 0 640 480') 
omxplayer "${SizeAndPosition[@]}" "$TARGETFOLDER"/*.mp4 
+0

Зачем это нужно? – Paolo

+0

У меня нет omxplayer или Raspberry Pi для тестирования, однако вывод 'omxplayer -h' (найденный в Интернете) показывает« -win »x1 y1 x2 y2« Установить положение видео-окна », отображая« x1 y1 x2 y2', окруженный кавычками, но в массиве, что потеряно, будет '-win 0 0 640 480' без кавычек. Являются ли кавычки необязательными или это имеет значение? – user3439894

+0

@Paolo Потому что, когда вы используете '$ SizeAndPosition' (без кавычек), отсутствие цитат заставляет слова разделяться. Цитирование '' $ SizeAndPosition '', хотя и не помогло бы, потому что тогда вся строка будет единственным аргументом. Лучшим обходным решением является использование массива. Посмотрите на ссылку в моем ответе для более подробного объяснения. – user000001

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