【问题标题】:bash assign variable with parameters with space in valuebash 用带空格的参数分配变量
【发布时间】:2020-07-17 15:45:21
【问题描述】:

我需要通过我的ytdlExtraOptions 变量将--external-downloader ffmpeg --external-downloader-args -movflags frag_keyframe+empty_moov 作为4 个参数传递给我的一个bash 函数(在我的.bash_functions 中定义):

$ 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 变量?

【问题讨论】:

  • 你真的不能。使用 bash 数组。
  • @KamilCuk 我要用 bash 数组重写我的问题。
  • 不清楚你在问什么。请澄清一下很酷。
  • @LéaGris 我重写了我的问题以澄清事情。如果它更容易理解,请撤消你的否决:)
  • 您已经分配了它,但请在您的数组变量引用周围添加双引号:set -- "${ytdlExtraOptions[@]}",它会正确设置您的参数。

标签: bash parameter-passing command-line-arguments


【解决方案1】:

使用 bash 数组。

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

或者,您可以使用 evil evalprintf "%q " 正确引用和重新评估您的参数:

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

【讨论】:

    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 2014-07-18
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2018-08-22
    相关资源
    最近更新 更多