function vi_diff_files() {
local ref=$1
# error here
# 去掉local 可以正常运行, 但会污染所在终端内的 file_list 变量
# 上面的 $ref 可以正常使用
local file_list=$(git diff "${ref}" --name-only | tr ' ' '\ ' | tr '\n' ' ')
if [[ ! "$file_list" ]]; then
echo "empty file list to edit"
return 2
fi
vim --cmd "args ${file_list}"
}
提问者想通过上面的函数 用vim打开 git diff HEAD*
后的文件列表
zsh 中执行 :vi_diff_files
时, 报错 vi_diff_files:local:13: not valid in this context: ...
测试了下题主的脚本bash没问题,在zsh下报跟题主一样的错误。
猜测是因为
`$()
`执行的时间很早,导致local这一行的内容被文件之间的空格截断了。加上双引号我这儿就正常了。题主测试一下吧。------ 补充参考 ------
Capturing multiple line output to a bash variable