0

如何在没有提示的情况下执行 ssh-keygen的问题中,我发现他们使用这里的字符串,如下所示:

""$'\n'"y"

为什么他们之前需要双引号$?它似乎$'\n'y等于它:

bash$ cat - <<< ""$'\n'"y" | od -c
0000000 \n y \n
0000003
bash$ cat - <<< $'\n'y | od -c
0000000 \n y \n
0000003 
4

1 回答 1

2

没有理由; 空的双引号字符串是完全没有必要的。

shell 使用引用来对标记进行分组,否则这些标记将被拆分。token完全等同于""token"token"(或""""""""""token"""t"o"k"e"n"等,如果你愿意的话)在引号删除之后。

您真正需要空字符串的唯一地方是当参数应该是长度为零的字符串时(例如printf '%s\n' "first line" "" "third line"倒数第二个参数是空字符串),尽管它有时也可以用于消歧(与前者尝试扩展"$HOMEdir"的地方不同"$HOME""dir"一个名称长度为七个字符的变量;尽管通常您会使用它"${HOME}dir"来区分)。


(多个相邻的引号对 shell 没有意义;""""只是空字符串""旁边的空字符串""。)

于 2021-07-30T17:17:03.450 回答