如何在bash中设置包含单qoutes和双qoutes的命令别名

如何在bash中设置包含单qoutes和双qoutes的命令别名

我无法设置别名hexdump -e '/1 "%_ax) "' -e '/1 "%02X" "\n"'


我尝试过以下方法但是失败的:

alias analyze=\'hexdump -e '/1 "%_ax) "' -e '/1 "%02X" "\n"'\'

(注意第一个和最后一个单引号,我已经将它们都转义了)

alias analyze='hexdump -e \'/1 "%_ax) "\' -e \'/1 "%02X" "\n"\''

(请注意,在这种情况下,我已经转义了命令之间的所有 4 个单引号)

alias analyze=hexdump -e '/1 "%_ax) "' -e '/1 "%02X" "\n"'

(根本不用引号将命令括起来)


如何hexdump -e '/1 "%_ax) "' -e '/1 "%02X" "\n"'在 bash 中设置别名?

答案1

根据经验,如果转义一种引号不起作用,请转义另一种:

alias analyze="hexdump -e '/1 \"%_ax) \"' -e '/1 \"%02X\" \"\n\"'"

在这里,我转义了内部双引号,并用双引号引用了所有内容。

完整的规则似乎是您可以在双引号内转义双引号,但不能在单引号内转义单引号。您必须转义外部的,但在定义别名时它不起作用。

$ alias hi='echo hi'        #works
$ alias hi='echo "hi"'      #works
$ alias hi='echo \"hi\"'    #works
$ alias hi="echo \'hi\'"    #works
$ alias hi="echo \"hi\""    #works
$ alias hi='echo \'hi\''    #doesn't work
$ alias hi=\'echo 'hi'\'    #should work but doesn't

正确定义别名后,您可以使用alias列出所有别名的命令向 bash 询问正确答案是什么。如果你找不到正确的引用,你可以作弊并使用@meuh的方法。在这种情况下:

$ alias
alias analyze='hexdump -e '\''/1 "%_ax) "'\'' -e '\''/1 "%02X" "\n"'\'''

答案2

您还可以让 bash 为您执行转义引用,例如

read -r  <<\!
hexdump -e '/1 "%_ax) "' -e '/1 "%02X" "\n"'
!
alias analyze="$REPLY"

相关内容