Bash:需要在字符串周围删除单引号

Mad*_*ddy 4 bash

以下是我的bash脚本中的代码段:

....
....
for ((i=0; i<${#abc[@]}; i++))
  do
    xyz=${abc[i]}
....
....
Run Code Online (Sandbox Code Playgroud)

当在脚本中替换'xyz'的值时,该值在其周围有单引号:

'"6b76cdae-a4a8-4e88-989d-1581ae2d5b98"'
Run Code Online (Sandbox Code Playgroud)

为什么添加单引号以及如何剥离它们?

谢谢!

nin*_*zza 11

你可以更换

xyz=${abc[i]}

评估 xyz=${abc[i]}

这是一个说明会发生什么的示例:

$ foo="'"'"bar"'"'"
$ echo $foo
'"bar"'
$ eval foo=$foo
$ echo $foo
"bar"
$ eval foo=$foo
$ echo $foo
bar
Run Code Online (Sandbox Code Playgroud)

所以,神圣的事情eval是分配被分成两部分:

  1. 评估 $abc
  2. 分配给 $xyz

而不仅仅是第 2 步。

也许在您的情况下,您应该考虑已经更改分配,abc但由于无知,我不知道;)


Cyr*_*rus 8

您可以尝试使用参数扩展删除数组abc 中的所有单引号:

abc=(${abc[@]//\'/})
Run Code Online (Sandbox Code Playgroud)

您可以尝试使用参数扩展删除字符串xyz 中的所有单引号:

xyz=${xyz//\'/}
Run Code Online (Sandbox Code Playgroud)