运行 ${ 大括号内的命令
run command inside of ${ curly braces
我想为 cd
添加别名,这样它会把我带到我当前 git 项目的根目录,如果找不到它,它会把我带到我的正常主目录。
我正在尝试将 HOME
设置为 git 根,或者,如果找不到,则设置为我的普通 home 变量。
alias cd='HOME="${$(git rev-parse --show-toplevel):-~}" cd'
不过没用。
你不能 运行 ${}
中的命令,除非在未设置值时的回退子句中(在 POSIX sh 或 bash 中;在 zsh 中可能是可行的,它允许各种古怪的语法。
无论如何,如果使用函数,需要的扭曲要少得多:
# yes, you can call this cd, if you *really* want to.
cdr() {
if (( $# )); then
command cd "$@"
else
local home
home=$(git rev-parse --show-toplevel 2>/dev/null) || home=$HOME
command cd "$home"
fi
}
注:
- 使用函数可以让我们测试参数列表、使用分支逻辑、拥有局部变量等。
command cd
用于调用真正的 cd
实现而不是递归。
当然,可以在参数扩展中执行命令。
好吧,仅在失败的一面,即:
$ unset var
$ echo ${var:-"$(echo "hello world!")"}
因此,如果您使用失败端,您可能会执行 git 命令。
假设 var 为空:
unset var
var=${var:-"$(git rev-parse --show-toplevel 2>/dev/null)"}"
但是使用以下方法会更简单:
var="$(git rev-parse --show-toplevel 2>/dev/null)"
并且,如果之后 var 仍然为空,请使用:
HOME=${var:-~} builtin cd
产生:
var="$(git rev-parse --show-toplevel 2>/dev/null)"; HOME=${var:-~} builtin cd
可以在别名中使用:
alias cdr='var="$(git …)"; HOME=${var:-~} builtin cd'
我想为 cd
添加别名,这样它会把我带到我当前 git 项目的根目录,如果找不到它,它会把我带到我的正常主目录。
我正在尝试将 HOME
设置为 git 根,或者,如果找不到,则设置为我的普通 home 变量。
alias cd='HOME="${$(git rev-parse --show-toplevel):-~}" cd'
不过没用。
你不能 运行 ${}
中的命令,除非在未设置值时的回退子句中(在 POSIX sh 或 bash 中;在 zsh 中可能是可行的,它允许各种古怪的语法。
无论如何,如果使用函数,需要的扭曲要少得多:
# yes, you can call this cd, if you *really* want to.
cdr() {
if (( $# )); then
command cd "$@"
else
local home
home=$(git rev-parse --show-toplevel 2>/dev/null) || home=$HOME
command cd "$home"
fi
}
注:
- 使用函数可以让我们测试参数列表、使用分支逻辑、拥有局部变量等。
command cd
用于调用真正的cd
实现而不是递归。
当然,可以在参数扩展中执行命令。
好吧,仅在失败的一面,即:
$ unset var
$ echo ${var:-"$(echo "hello world!")"}
因此,如果您使用失败端,您可能会执行 git 命令。 假设 var 为空:
unset var
var=${var:-"$(git rev-parse --show-toplevel 2>/dev/null)"}"
但是使用以下方法会更简单:
var="$(git rev-parse --show-toplevel 2>/dev/null)"
并且,如果之后 var 仍然为空,请使用:
HOME=${var:-~} builtin cd
产生:
var="$(git rev-parse --show-toplevel 2>/dev/null)"; HOME=${var:-~} builtin cd
可以在别名中使用:
alias cdr='var="$(git …)"; HOME=${var:-~} builtin cd'