使用由BASH中的特定字符分隔的字符串创建文件

使用由BASH中的特定字符分隔的字符串创建文件,bash,loops,split,Bash,Loops,Split,假设我们有以下命令及其相关输出: gsettings list-recursively org.gnome.Terminal.ProfilesList | head -n 1 | grep -oP '(?<=\[).*?(?=\])' 我需要在脚本中使用gsettings命令,并创建有关输出gsettings命令的文件名。例如,文件名应该是 b1dcc9dd-5262-4d8d-a863-c897e6d979b9 下一个: ca4b733c-53f2-4a7e-8a47-dce8de18

假设我们有以下命令及其相关输出:

gsettings list-recursively org.gnome.Terminal.ProfilesList | head -n 1 | grep -oP '(?<=\[).*?(?=\])'
我需要在脚本中使用gsettings命令,并创建有关输出gsettings命令的文件名。例如,文件名应该是

b1dcc9dd-5262-4d8d-a863-c897e6d979b9

下一个:

ca4b733c-53f2-4a7e-8a47-dce8de182546

等等


如何执行此操作?

您可以使用进程替换来读取gsettings输出并将其存储在数组中:

IFS=', ' read -r -a array < <(gsettings)
for f in "${array[@]}"
do
    file=$(echo $f |tr -d "'" ) # removes leading and trailing quotes
    touch "$file"
done

IFS=”,“read-r-a数组<另一个解决方案。。。只需通过管道将命令的输出传输到:

your_command | sed "s/[ ']//g" | xargs -d, touch

您可以将sed命令更改为提前退出,然后OP可以删除
|head-1
sed“s/[']//g;1q”
。若要替换
][
您只需将其添加到字符类的前面:
sed“s/[]]]//g;1q”
这将允许OP将gsettings直接传递到sed。@dev null:您完全正确。将让OP根据您的建议更改其初始cmd
your_command | sed "s/[ ']//g" | xargs -d, touch