如何更改 Bash 中字符串中的 2 个单词,其中其中一个单词中有一个“:”

如何更改 Bash 中字符串中的 2 个单词,其中其中一个单词中有一个“:”

我尽了最大努力尝试制作一个脚本来迭代 2 个数组。每个数组中的值需要将其值输入到一个ExecuteSyncoid基于调用的字符串的字符串中,SyncoidCommand以便执行包含更改部分的命令。


该字符串称为

SyncoidCommand

SyncoidCommand需要更改的命令/字符串如下所示

SynCoid-IterateThroughDataSets.sh -s /home/darkyere/Scripts/Syncoid/shortsourcelist -d /home/darkyere/Scripts/Syncoid/shortdestinationlist -c "syncoid <username>@XXX.XXX.XXX.XXX:SourceDataSet DestDataSet --compress none --sshcipher [email protected] --sshport <Port> --sshkey "/Dest/To/KeyFile" --no-privilege-elevation" -p <Password>

现在需要改变的两个部分是

<username>@XXX.XXX.XXX.XXX:SourceDataSet DestDataSet

所讨论的两个问题在哪里SourceDataSetDestDataSet

从长远来看,它也需要以相反的方式工作,如下所示

SourceDataSet <username>@XXX.XXX.XXX.XXX:DestDataSet

我尝试过这些不同的方法,还有一些我没有保留在我的尝试中

$SourcePath

# And

$DestPath

是我尝试插入“ExecuteSyncoid”的两个数组的值

ExecuteSyncoid="${SyncoidCommand/SourceDataSet/$SourcePath}"  
ExecuteSyncoid="${SyncoidCommand/DestDataSet/$DestPath}"

# ----------


ExecuteSyncoid=$(echo $SyncoidCommand | sed "s+SourceDataSet+$SourcePath+g")
ExecuteSyncoid=$(echo $SyncoidCommand | sed "s+DestDataSet+$DestPath/+g")

但改变后的字符串总是类似于

syncoid <username>@XXX.XXX.XXX.XXX:SourceDataSet Storage/WallaBag --compress none --sshcipher [email protected] --sshport <Port> --sshkey "/Dest/To/KeyFile" --no-privilege-elevation" -p <Password>

所以代码改起来DestDataset没有问题。

但在我所有的尝试中,包括比我发布的更多尝试,它从未改变

<username>@XXX.XXX.XXX.XXX:SourceDataSet

至等。

<username>@XXX.XXX.XXX.XXX:Storage/WallaBag

有没有人有一些 bash 知识可以帮助我更改字符串中带有“:”的部分无论它是

<username>@XXX.XXX.XXX.XXX:SourceDataSet DestDataSet

# Or

SourceDataSet <username>@XXX.XXX.XXX.XXX:DestDataSet

最好的问候,感谢您阅读达凯尔

答案1

(答案从问题的编辑移至社区维基答案。)

这是错误

ExecuteSyncoid="${SyncoidCommand/SourceDataSet/$SourcePath}"  
ExecuteSyncoid="${SyncoidCommand/DestDataSet/$DestPath}"

感谢 Philippos 的帮助,解决了这个问题

ExecuteSyncoid="${SyncoidCommand/SourceDataSet/$SourcePath}"  
ExecuteSyncoid2="${SyncoidCommand/DestDataSet/$DestPath}"

这就像我用第二个字符串覆盖第一个字符串一样简单。改变第二次刺痛后,它起作用了。

谢谢你,有一个美好的一天。

相关内容