我想写下一行:

emacs --eval '(ediff "$1" "$2")'

变成一个shell脚本,所以我不需要每次都写这么长和复杂的行。但是,当我将它按原样放入shell脚本时,会得到一个错误:
ediff-find-file: File `$1' does not exist or is not readable

我想这里有某种逃逸问题,我需要在这行加上一些。我到底要修什么?

最佳答案

这是正常的,字符串被单引号包围,变量不在单引号内展开。
应该使用双引号使它们得到扩展,并避免字符串中存在的双引号:

emacs --eval "(ediff \"$1\" \"$2\")"

值得注意的是,在展开变量时,只有外部引号才起作用。即:
$ A=foo
$ echo "'$A'"

将打印'foo'。在这里,单引号包围$A并不重要:外部引号是双引号。

10-08 15:57