我已经查看了 Bash 中 $(command substitution) 中的引用,但仍然没有得到我做错的事情(我的代码在我看来是接受的答案中的“推荐方式”)以及如何修复它:
print_and_run(){
echo next line: "$1"
echo "$($1)"
}
print_and_run 'sed --in-place -- "s|fetch = +refs/\*:refs/\*|fetch = +refs/heads/*:refs/remotes/origin/*|" .git/config'
next line: sed --in-place -- "s|fetch = +refs/\*:refs/\*|fetch = +refs/heads/*:refs/remotes/origin/*|" .git/config
sed: -e expression #1, char 1: unknown command: `"'
sed
line 独立工作,函数print_and_run
适用于不带引号的命令,例如print_and_run 'cat ./.git/config'
. TIA
顺便说一句,不确定它是否重要:我写道echo "$($1)"
不要echo $($1)
用换行符打印:https ://stackoverflow.com/questions/15184358/how-to-avoid-bash-command-substitution-to-remove-the-newline-character ,和现在我看到前者看起来像“是推荐的方式”)。
您也许可以尝试不同的方式:
结果:
在此示例中,保留了原始引用。但是,管道或重定向之类的东西仍然不起作用。
一种完全不同的方法是依赖 shell 的内置命令打印:
它将打印这样一行:
所以您根本不必执行自己的打印命令,shell 已经为您完成了。