开发者社区 问答 正文

shell 脚本中 如何将多行输出捕获赋值给一个变量?

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: ...

展开
收起
a123456678 2016-06-22 14:55:28 3402 分享 版权
1 条回答
写回答
取消 提交回答
  • local file_list="$(git diff "${ref}" --name-only | tr ' ' ' ' | tr 'n' ' ')"
    测试了下题主的脚本bash没问题,在zsh下报跟题主一样的错误。

    2019-07-17 19:45:35
    赞同 展开评论