实际上,我无法理解这段代码的结尾:
function mkdircd () {
mkdir -p "$@" && eval cd "\"\$$#\"";
}
Run Code Online (Sandbox Code Playgroud)
eval是一个命令,但符号结尾的含义是什么?--->cd "\"\$$#\""
$mkdir -p /tmp/foo/bar/
$cd /tmp/foo/bar
$pwd
/tmp/foo/bar
Run Code Online (Sandbox Code Playgroud)
将此函数添加到.bashrc中
$mkdircd /tmp/foo/bar/
$pwd
/tmp/foo/bar/
Run Code Online (Sandbox Code Playgroud)
eval接收一个字符串作为参数并将其作为shell命令进行评估; 因此,在正常情况下,您在源中看到的内容将被评估两次(一次在构建eval命令时,然后在eval运行时再次评估).
这种双重评估(shell变量替换,转义等)会夸大语法,所以看起来像是乱码.
cd "\"\$$#\""
Run Code Online (Sandbox Code Playgroud)
评估为
cd "$4"
Run Code Online (Sandbox Code Playgroud)
(假设那$#是4).而且,当eval它运行时,将评估为
cd /my/new/path
Run Code Online (Sandbox Code Playgroud)
(假设那$4是/my/new/path).
为什么那$#件事?因为你的shell函数会创建你传递给它的所有路径,然后尝试cd进入最后给定的路径($4如果给出了四个路径).
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |