在bash中比较带有“-”连字符的两个字符串

3

我尝试比较两个包含"-"的字符串,例如:

if [[ "–change_team" == "${Args[2]}" ]]; then

其中"${Args[2]}"代表"–change_team"

我尝试像这样打印"–change_team":

echo "–change_team"

我得到的是:
âchange_team

if语句从未成功过,我已经尝试使用""进行转义,但效果不佳。


1
该字符可能不是连字符。有几个不同的8位图形字符看起来像连字符,但根据显示的集合不同,它们不会显示为连字符。对于 echo "-change_team" | od -cecho "${Args[2]}" | od -c,你看到了什么? - lurker

它打印: 0000000 - 改变_团队 \n 0000015

0000000 - 改变_团队 \n 0000015
- Emad
这与我得到的不符。当我使用您在问题陈述中展示的字符串(复制“-change_team”并执行echo“-change_team”| od -c)时,我得到了:0000000 342 200 223 c h a n g e _ t e a m \n。因此,您在问题陈述中展示的那个不是连字符。 - lurker
这与我的SSH服务器有关系吗?(大学)说实话,我以为连字符只是“-”的另一个名称,我不知道它们之间有什么区别。 - Emad
请检查在 if [[ "–change_team" == "${Args[2]}" ]]; then 中的 "change_team" 字符前面使用的连字符。我认为那不是一个连字符。编辑脚本,删除 并尝试重新输入一个 "真正的" 连字符。 - lurker
请注意,使用真正的连字符进行字符串比较是棘手的,因为连字符会启动“test”布尔运算符。因此,当您解决当前问题时,应将其更改为类似于[[ x-change_team" == "x${Args[2]}" ]]的内容,否则测试将自动失败。 - Netch
1个回答

2

对于用户界面中使用的字符,可能会有几个不同的8位图形字符看起来像连字符。在您的if语句中:

if [[ "–change_team" == "${Args[2]}" ]]; then

如果我复制你的“-change_team”字符串并在这里使用:
echo "–change_team" | od -c

我得到了这个结果:
0000000 342 200 223   c   h   a   n   g   e   _   t   e   a   m  \n
0000017

如果这是一个真正的连字符,你将会得到:
0000000 -   c   h   a   n   g   e   _   t   e   a   m  \n
0000017

因此,在原始脚本中,用于比较的“连字符”字符不是正确的连字符。


非常感谢,看起来当我从 PDF 中复制 "–change_team" 时,它会复制为连字符,并且我正在与普通破折号 "-" 进行比较。 - Emad
@Emad4U 是的,直接从PDF复制有点冒险,因为Adobe会使用他们选择的字体/字符来表示例如连字符。我很高兴你已经解决了这个问题。 :) - lurker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接