Bash:别名中的嵌套反引号会导致问题

Kom*_*ave 9 bash nested escaping find

我正在尝试编写一个别名,它将跳转到cwd的后代目录,该目录包含一个指定的文件(或首次find发现的这种文件名):

以下命令组合可实现所需结果:

cd `dirname \`find -name 'MyFile.txt' | sed -n 1p\``
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法以正确的方式来创建一个工作别名:

alias jump="cd \`dirname \\\`find -name '$1' | sed -n 1p\\\`\`"
Run Code Online (Sandbox Code Playgroud)

输出:

/*
dirname: missing operand
Try `dirname --help' for more information.
bash: cd: find: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我的逻辑是反引号需要在双引号字符串中转义为单个\而我无法\\将其转换为字符串中的单个反斜杠,因此第二个嵌套反引号需要1 + 2 = 3.

有什么建议?

dog*_*ane 16

别名不能像参数一样$1.请改用功能.

也可$(command)用于命令替换而不是反引号,因为它更容易嵌套.

功能将是:

jump() {
    cd $(dirname $(find -name "$1" | sed -n 1p))
}
Run Code Online (Sandbox Code Playgroud)


Lee*_*ton 5

反引号是命令替换的旧形式,并且不能轻松嵌套它们。然而,新$() 形式确实很容易嵌套:

cd $(dirname $(find -name 'MyFile.txt' | sed -n 1p))
Run Code Online (Sandbox Code Playgroud)