Hi Ævar , Sorry if I sent this email twice. I forget to CC git@xxxxxxxxxxxxxxx. On Wed, Feb 8, 2023 at 2:50 AM Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> wrote: > I'm not sure because you're just posting snippets, if you have problems > in the future it would be best to post the full diff to "master" that > you're having issues with, e.g. an RFC per Documentation/SubmittingPatches. Yeah, posting snippets doesn't describe the problem very well. Thanks for the advice. > But I think this is because the test itself is using '-quotes, so you > need to use '\'' if you want to single quote, and " for double quotes, > and \" if the test were in double quotes. > But the issues you're having here aren't with Git, but the very basics > of POSIX shell syntax. > I think it would be good for you to read some basic documentation on > POSIX shells, their syntax, common POSIX commands etc. Your local "man > sh" is probably a good place to start, but there's also books, online > tutorials etc. Thanks, will do . I'll try to avoid making mistakes on POSIX shells questions and really learn the basic POSIX shells syntax. > In this case the syntax you're trying to get working is something we > usually try to avoid in either case, i.e. even if it involves an > external process we usually do: > cat >out <<-\EOF > a > b > c > EOF > > Rather than: > > echo "a > b > c" >out > > If you are using "echo" I saw another change of yours had e.g.: > > echo x >f && > echo y >>f && > echo z >>f > > It's better to e.g. (assuming use of "echo", or other built-ins or > commands): > > { > echo x && > echo y && > echo z > } >f Seen I pass the test s, I'v a submit V5 patch instead of RFC, Would you mind taking a look at this for me? Looking forward to reply. ----------------------------- Thanks Shuqi On Wed, Feb 8, 2023 at 2:50 AM Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> wrote: > > > On Wed, Feb 08 2023, Shuqi Liang wrote: > > > On Tue, Feb 7, 2023 at 3:12 AM Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> wrote: > > > >> But this is almost certainly that you're trying to insert leading > >> whitespace into a line that's in a <<-EOF here-doc, the "-" part of that > >> means that your leading whitespace is being stripped. > >> > >> A typical idiom for that is have a marker for the start of line, and > >> strip the whitespace with "sed". See this for existing examples: > >> > >> git grep 'sed.*\^.*>.*EOF' > > > > > > I try to use Z as the marker in front of 'a' and 'b' and use sed -e > > "s/Z/ /g" in order to replace Z with white space but it still can not > > pass the test. > > > > Then I realize even if I don't add tab in front of the line but with > > space in front of 'a' and 'b' like the original test script. It still > > says it can't read "b" and "c” : > > > > test_expect_success 'apply at the beginning' ' > > cat >test-patch<<\EOF && > > diff a/file b/file > > --- a/file > > +++ b/file > > @@ -1,2 +1,3 @@ > > +a > > b > > c > > EOF > > > > echo >file 'a > > b > > c'&& > > git update-index file&& > > test_must_fail git apply --index test-patch > > ' > > Maybe the error is not caused by whitespace? > > > > Then I try to change: > > > > echo >file 'a > > b > > c' > > > > To: > > echo >file "a > > b > > c" > > > > Then everything passes the test. I think double quotes allow for > > variable substitution and command substitution, while single quotes > > preserve the literal value of all characters within the quotes. In > > this case, the string contains no variables or commands, so either > > type of quote would work. Is there something wrong with my idea? Is it > > good to modify code like that? > > > > Looking forward to your reply! > > I'm not sure because you're just posting snippets, if you have problems > in the future it would be best to post the full diff to "master" that > you're having issues with, e.g. an RFC per Documentation/SubmittingPatches. > > But I think this is because the test itself is using '-quotes, so you > need to use '\'' if you want to single quote, and " for double quotes, > and \" if the test were in double quotes. > > But the issues you're having here aren't with Git, but the very basics > of POSIX shell syntax. > > I think it would be good for you to read some basic documentation on > POSIX shells, their syntax, common POSIX commands etc. Your local "man > sh" is probably a good place to start, but there's also books, online > tutorials etc. > > In this case the syntax you're trying to get working is something we > usually try to avoid in either case, i.e. even if it involves an > external process we usually do: > > cat >out <<-\EOF > a > b > c > EOF > > Rather than: > > echo "a > b > c" >out > > If you are using "echo" I saw another change of yours had e.g.: > > echo x >f && > echo y >>f && > echo z >>f > > It's better to e.g. (assuming use of "echo", or other built-ins or > commands): > > { > echo x && > echo y && > echo z > } >f