如何在 zsh 中回显裸连字符 (`-`)?

How to echo bare hypen (`-`) in zsh?

我正在寻找一种方法来解决 zsh echo 显然将只是连字符的字符串视为空字符串的问题

echo -
# no output

echo "-"
# no output

echo '-'
# no output

具体来说,我在一个已知字符处拆分一个字符串,然后处理这两个部分,这两个部分中的任何一个都可以是 -。喜欢

% my_f() {
  my_arr=(${(s.b.)1})
  echo $my_arr[1]
  echo $my_arr[2]
}

% my_f "abc"
a
b

% my_f "-bc"
# I need to know -
b

% my_f "ab-"
a
# I need to know -

%

在我正在做的特定事情中,我可以重新做一些事情,这样潜在的 - 就不会自己回显

my_arr=(${(qqqs.b.)1})
echo " ${(Q)my_arr[1]} "
echo " ${(Q)my_arr[2]} "

但这感觉像是运气,需要在这个脚本周围洒上很多 qqqQ。有没有更好的方法?

尝试echo - "-"。第一个破折号终止选项处理,因此打印以下文本。

有关更多上下文,请参阅这个出色的答案:

改用printf。 (这通常是关于 any 使用 echo 的好建议。)

my_f () {
  printf '%s\n' "${(s.b.)1}"
}