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

时间:2016-03-19 13:04:02

标签: bash loops split

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

gsettings list-recursively org.gnome.Terminal.ProfilesList | head -n 1 | grep -oP '(?<=\[).*?(?=\])'

输出:

'b1dcc9dd-5262-4d8d-a863-c897e6d979b9', 'ca4b733c-53f2-4a7e-8a47-dce8de182546', '802e8bb8-1b78-4e1b-b97a-538d7e2f9c63', '892cd84f-9718-46ef-be06-eeda0a0550b1', '6a7d836f-b2e8-4a1e-87c9-e64e9692c8a8', '2b9e8848-0b4a-44c7-98c7-3a7e880e9b45', 'b23a4a62-3e25-40ae-844f-00fb1fc244d9'

我需要在脚本中使用gsettings命令并创建有关输出ot gessetings命令的文件名。例如,文件名应为

  

b1dcc9dd-5262-4d8d-a863-c897e6d979b9

下一个:

  

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

等等。

我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

另一个解决方案......只需将命令输出传递给:

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

答案 1 :(得分:0)

您可以使用进程替换来读取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