gpt4 book ai didi

linux - 如何使用sed替换bash中后跟0个或更多空格的命令

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:38 25 4
gpt4 key购买 nike

我不知道如何替换 bash 变量中后跟 0 个或更多空格的逗号。这是我所拥有的:

base="test00 test01 test02 test03"
options="test04,test05, test06"

for b in $(echo $options | sed "s/, \+/ /g")
do
base="${base} $b"
done

我想做的是将“选项”附加到“基础”。选项是用户输入,可以是空的或 csv 列表,但该列表可以是

"test04, test05, test06"-> 逗号后空格

"test04,test05,test06"-> 没有空格

"test04,test05,test06"-> 混合物

我需要的是我的输出“base”是一个空格分隔的列表,但是无论我尝试什么,我的列表在第一个单词后都会被截断。

我的预期结果是

"test00 test01 test02 test03 test04 test05 test06"

最佳答案

如果您的目标是生成命令,则此技术完全错误:如 BashFAQ #50 中所述,命令参数应存储在数组中,而不是空格分隔的字符串中。

base=( test00 test01 test02 test03 )
IFS=', ' read -r -a options_array <<<"$options"

# ...and, to execute the result:
"${base[@]}" "${options_array[@]}"

也就是说,即使这对于许多合法的用例来说也是不够的:考虑一下如果你想传递一个包含文字空白的选项会发生什么——例如,运行 ./your-base-command "base带空格的参数”“第二个基本参数”“带空格的选项”“带空格的选项”“带空格的第二个选项”。为此,您需要类似以下内容:

base=( ./your-base-command "base argument with spaces" "second base argument" )
options="option with spaces, second option with spaces"

# read options into an array, splitting on commas
IFS=, read -r -a options_array <<<"$options"

# trim leading and trailing spaces from array elements
options_array=( "${options_array[@]% }" )
options_array=( "${options_array[@]# }" )

# ...and, to execute the result:
"${base[@]}" "${options_array[@]}"

关于linux - 如何使用sed替换bash中后跟0个或更多空格的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39276550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com