On Thu, Nov 24, 2022 at 9:32 PM Yoichi Nakayama <yoichi.nakayama@xxxxxxxxx> wrote: > > On Thu, Nov 24, 2022 at 10:09 AM Jeff King <peff@xxxxxxxx> wrote: > > > > On Wed, Nov 23, 2022 at 02:33:50PM +0900, Yoichi Nakayama wrote: > > > > > On Wed, Nov 23, 2022 at 3:54 AM Jeff King <peff@xxxxxxxx> wrote: > > > > Hmm, I know I suggested using a temporary file since "cat $tmpfile" > > > > should be pretty safe. But it does still have problems if your tmp > > > > directory has spaces. Or even other metacharacters, which I think will > > > > be interpreted by the eval, since $@ is expanded in the outermost level > > > > of the shell. > > > > > > Right. But the problem is not specific to emacs (it happens in vim too). > > > Let's fix it another time (as you noted, that's pretty unlikely, and we may > > > not even need to fix it). > > > > Good point. The vim version is easier to fix (we just need to > > double-quote \$1 inside the eval), but the fact that nobody has > > complained is an indication that it does not really matter. > > I've confirmed the vim version is fixed by > eval "$editor -q \"\$1\"" > > With your hint, I found the emacs version can be fixed > by single-quoting the variable (I found a mistake in the > emacs version. Since there is only one argument, I > should use $1 instead of $@. I'll fix it.), and the vim > version can be also in the similar form with single quote: > eval "$editor -q '$1'" > > The original vim version used the notation \$1 instead of $1. > I'm worried that the emacs version might need the backslash. > What does the backslash mean? Is it necessary? I found the answer myself. The backslash is to leave the evaluation of the argument to the 'eval' execution. And another question arose. Why do we use eval? What is the difference from running it directly like below? $editor -q $1 -- Yoichi NAKAYAMA