Path: csiph.com!goblin1!goblin.stu.neva.ru!usenet.stanford.edu!not-for-mail From: Keith Thompson Newsgroups: gnu.bash.bug Subject: builtin echo vs /bin/echo appears to affect variable scope Date: Mon, 2 Mar 2020 11:54:24 -0800 Lines: 81 Approved: bug-bash@gnu.org Message-ID: References: NNTP-Posting-Host: lists.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" X-Trace: usenet.stanford.edu 1583178883 9005 209.51.188.17 (2 Mar 2020 19:54:43 GMT) X-Complaints-To: action@cs.stanford.edu Cc: Keith Thompson To: bug-bash@gnu.org Envelope-to: bug-bash@gnu.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=haWOJN2kFzt1Icv2YpKj0YeRidYEY6OWJYH9tJTepPs=; b=bOkkdXqMF6rAwfuKttZTNvTTKc9ePRHvNvSjD/WZrc0OG8tUDo+X5UjjxyufKL77xv dQQsGGsL+ltTrcg1z38D1I8dCUFKGx/AYlwQmRjO8p0SuTIqikb8BOCiJfqG4o/NhKj/ hCwqbFEyjCozvhl3dbzue71Ctngv8OPz29cNY3iYdg6OBPbhAOWsFLeAImukOain9y9S gZBjQGvmByxDYZQwTzRgSKzAwdPa94bWh2/0IpIJ9VDAbMrG+H4v/VxqgpA0i2FFW5PW YaeoS9QwGUDkukpnfFPHLIuKebEYVG2mggeNsZ1no2nWFkkmPSlcHedCtZKQeyn009X2 Mhhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=haWOJN2kFzt1Icv2YpKj0YeRidYEY6OWJYH9tJTepPs=; b=ZWSbxZX6+gPg98BiId7oTFQmClVPb3oM2gJvAUcmHTbYpfmlG+sXrfvmRtk6hWverL Hd+AXVna4EdFD2tL8oYFnfatjT91ksVXsxMUTZrg0wpC3EIYyGQFybOm9XpzhdzT+6L1 vsArxaKelZL7LflXrTe2qWsSdQBYiIOdC5yXk3s1tU25Eks0tN+K42A85490LIOrmG+X c+tK0ykEuA/MocU3pHhHelq3BA4lloQaLK+RkXaVyBeC2voJ8T7oswqhklUJjVF+bHCq itqTOvozzfHXFgxQJW9ESHO0fSdxeEpgeTnrqL2ABXhSVgdght+ettY+Jft4JZxNIXhw PlTw== X-Gm-Message-State: ANhLgQ1XvGVzJ3j/SzBzkDePxiq03HYGUDJg3XOpzGathrTqiDHIN6yT 5K6GStvW9I0PKgTHJteiKsVljC+03xsZ5Ypqcr347d1UClc= X-Google-Smtp-Source: ADFU+vvficHA7Nap0hZSm7M9wtHORZsILXKjyYZEvfGoYtKtde+lWADuuR87EFMTsFGl5oSq5unMBMO5FphhTsLYVzo= X-Received: by 2002:a17:906:14d5:: with SMTP id y21mr922201ejc.212.1583178876807; Mon, 02 Mar 2020 11:54:36 -0800 (PST) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::534 X-BeenThere: bug-bash@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Bug reports for the GNU Bourne Again SHell List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: Xref: csiph.com gnu.bash.bug:15981 From: kst To: bug-bash@gnu.org Subject: echo vs /bin/echo appears to affect variable scope Configuration Information [Automatically generated, do not change]: Machine: x86_64 OS: linux-gnu Compiler: gcc Compilation CFLAGS: -g -O2 -Wno-parentheses -Wno-format-security uname output: Linux bomb20 4.15.0-88-generic #88-Ubuntu SMP Tue Feb 11 20:11:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux Machine Type: x86_64-pc-linux-gnu Bash Version: 5.0 Patch Level: 16 Release Status: release Description: The original test case was a small script in this answer on Stack Overflow: https://stackoverflow.com/a/60480960/827263 I've narrowed it down to two scripts that differ only in using "echo" vs. "/bin/echo". With the built-in "echo", $i is correctly incremented. With the external "/bin/echo", $i appears to be 0 on each iteration. Moving the "((i++))" into a separate command also works around the bug. Repeat-By: (/o/bin/bash is a symlink to bash 5.0.16 on my system.) bad.bash: ``` #!/o/bin/bash rm -f BASH_BUG_TEST* i=0 printf '%s\n' should-be-0 should-be-1 should-be-2 | \ while read word ; do /bin/echo hello \ > BASH_BUG_TEST_$((i++))_$word done ls -1 BASH_BUG_TEST* rm -f BASH_BUG_TEST* ``` Output of bad.bash: ``` BASH_BUG_TEST_0_should-be-0 BASH_BUG_TEST_0_should-be-1 BASH_BUG_TEST_0_should-be-2 ``` good.bash: ``` #!/o/bin/bash rm -f BASH_BUG_TEST* i=0 printf '%s\n' should-be-0 should-be-1 should-be-2 | \ while read word ; do echo hello \ > BASH_BUG_TEST_$((i++))_$word done ls -1 BASH_BUG_TEST* rm -f BASH_BUG_TEST* ``` Output of good.bash: ``` BASH_BUG_TEST_0_should-be-0 BASH_BUG_TEST_1_should-be-1 BASH_BUG_TEST_2_should-be-2 ```