Configuration Information [Automatically generated, do not change]: Machine: x86_64 OS: linux-gnu Compiler: gcc Compilation CFLAGS: -g -O2 -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -Wall uname output: Linux TAG009442498805 5.15.0-102-generic #112-Ubuntu SMP Tue Mar 5 16:50:32 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux Machine Type: x86_64-pc-linux-gnu
Bash Version: 5.1 Patch Level: 16 Release Status: release Description: When defining aliases and then exporting a function uses these aliases, the exported function body has the aliases expanded. This makes sense because we cannot be sure the same aliases exist in the child process where the exported function will eventually be used. However, when using subshells in the child process, the aliases are not expanded. This is unexpected behavior and potentially breaks the function. Repeat-By: # this is a minimal example showing where it works and where it doesnt work alias echo='echo PREFIX' echo hello world # prints "PREFIX hello world" => OK foo() { echo "hello world"; } export -f foo bash -c 'foo' # prints "PREFIX hello world" => OK foo() { output="$(echo "hello world")"; printf '%s\n' "$output"; } export -f 'foo' # prints "hello world" => NOT OK (PREFIX missing)