bash назначить переменную с параметрами с пробелом в значении - PullRequest
1 голос
/ 05 апреля 2020

Мне нужно передать --external-downloader ffmpeg --external-downloader-args -movflags frag_keyframe+empty_moov через мою переменную ytdlExtraOptions одной из моих bash функций (определенных в моем .bash_functions) как 4 аргумента:

$ set -- --external-downloader ffmpeg --external-downloader-args -movflags\ frag_keyframe+empty_moov
$ echo $4
-movflags frag_keyframe+empty_moov
$ ytdlExtraOptions="--external-downloader ffmpeg --external-downloader-args -movflags\\ frag_keyframe+empty_moov"
$ set -- $ytdlExtraOptions
$ echo $4
-movflags\

с массивом bash :

$ ytdlExtraOptions=(--external-downloader ffmpeg --external-downloader-args -movflags\ frag_keyframe+empty_moov)
$ echo ${ytdlExtraOptions[3]}
-movflags frag_keyframe+empty_moov
$ set -- ${ytdlExtraOptions[@]}
$ echo $4
-movflags

Как правильно назначить переменную ytdlExtraOptions?

1 Ответ

1 голос
/ 05 апреля 2020

Используйте массив bash.

set -- --external-downloader ffmpeg --external-downloader-args "-movflags frag_keyframe+empty_moov"
toto=("$@")
set -- "${toto[@]}"
echo $4

В качестве альтернативы вы можете использовать зло eval и printf "%q ", чтобы правильно процитировать и переоценить ваши аргументы:

set -- --external-downloader ffmpeg --external-downloader-args "-movflags frag_keyframe+empty_moov"
toto=$(printf "%q " "$@")
eval set -- "$toto"
...