请解释下面的 bash 函数

请解释下面的 bash 函数

我在网上找到了这个功能。它创建一个目录并更改目录。

但我想知道它的每一个部分。

function mkdircd () { mkdir -p "$@" && eval cd "\"\$$#\""; } 

答案1

您可以传入名称列表。它将为每个目录创建目录,然后 cd 进入最后的一。

这个不需要eval。我会这样写:

mkdircd () { mkdir -p "$@" && cd "${!#}"; }

${!#}用途间接扩张:$#是参数个数,所以${!#}是最后一个参数的值

答案2

mkdir -p "$@"创建名称作为参数传递的所有目录 ( $@)。

-p如果目录位于不存在的目录中,该选项允许递归创建目录。

eval cd "\"\$$#\""只需转到最后一个目录:$#为您提供传递的参数数量,从而\$$#为您提供最后一个参数(即:您作为参数传递的最后一个目录名称)。例如,如果有三个参数$#is 3,则eval运行命令cd "$3"

该命令实际上应该是eval cd "\"\${$#}\"".当有 10 个以上参数时,大括号在许多 shell 中是必需的,因为许多 shell 将类似"$10"参数 1 的值后跟字符的值0视为参数 10 的值。

相关内容