我想写下一行:
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
并不重要:外部引号是双引号。