gpt4 book ai didi

linux - 别名中的反斜杠未作为其定义的一部分存储

转载 作者:行者123 更新时间:2023-12-04 19:06:05 25 4
gpt4 key购买 nike

我有一个名为 BedrockServer 的屏幕 session 。我输入了这样的别名:

alias stop='screen -R BedrockServer -X stuff "stop $(printf '\r')"'
但是当我输入 alias ,它将其列为
alias stop='screen -R BedrockServer -X stuff "stop $(printf r)"'
并且别名不起作用。

我尝试过使用引号并在引号和美元符号之前使用反斜杠,但没有任何解决方法。
任何想法我做错了什么?

最佳答案

在单引号内除了 ' 之外的所有符号失去了它们的特殊意义。因此$( )尚未解释。如果它被解释,你可以嵌套引号。但由于它没有被解释,你不能嵌套引号。
你的别名基本上是

'some literal string 'anUnquotedString' another literal string'
未加引号的字符串 \rr 相同.
使用函数而不是别名可以轻松解决引用问题。
stop() {
screen -R BedrockServer -X stuff "stop $(printf '\r')"
}
如果你想坚持使用别名,有很多选项可以让引用正确,例如
alias stop="screen -R BedrockServer -X stuff \"stop \$(printf '\\r')\""
上面的两个命令都执行 printf每次执行 stop .这不是必需的。在别名中,您可以为定义执行一次(注意 \ 之前缺少的 $( ) ):
alias stop="screen -R BedrockServer -X stuff \"stop $(printf '\r')\""
对于函数和/或别名,您甚至可以删除 printf完全使用 ANSI C 字符串:
stop() {
screen -R BedrockServer -X stuff $'stop \r'
}
alias stop=$'screen -R BedrockServer -X stuff "stop \r"'

关于linux - 别名中的反斜杠未作为其定义的一部分存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69363833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com