如何在 bash 中接受输入字符串而不丢失引号?

如何在 bash 中接受输入字符串而不丢失引号?

例如,我的 .profile 中有这个函数:

alias () {
    command alias "$@"
}

然而,这会执行:

$ alias test=ls

如果我跑 $ alias test="ls"

我怎样才能让它接受带引号的字符串?

答案1

命令行上的双引号会被解析器吃掉。当您调用函数时,必须用单引号引用整个别名表达式,或者使用反斜杠转义每个双引号(或者混合使用转义和引号标记)。因此:

alias foo='echo "hi there"'
alias bar="echo "\"hi\ there\"

如果您尝试重新定义别名以便可以在别名右侧包含空格,则应该使用

command alias "$*"

不同之处在于,此版本扩展了所有位置参数,每个参数均以空格(IFS 的第一个字符)分隔,作为alias.这允许你做类似的事情

alias foo=echo over here

相关内容