我可以在 POSIX sh 脚本中避免这个子 shell 吗?
Can I avoid this subshell in a POSIX sh script?
我正在尝试理解,即使可以做到,我还能避免 subshell 吗?
这是编写代码的唯一方法还是有其他方法?
我尝试使用大括号 { ... }
,但它无法通过 shellcheck,也不会 运行。
is_running_interactively ()
# test if file descriptor 0 = standard input is connected to the terminal
{
[ -t 0 ]
}
is_tput_available ()
# check if tput coloring is available
{
command -v tput > /dev/null 2>&1 &&
tput bold > /dev/null 2>&1 &&
tput setaf 1 > /dev/null 2>&1
}
some_other_function ()
# so far unfinished function
{
# is this a subshell? if so, can I avoid it somehow?
( is_running_interactively && is_tput_available ) || # <-- HERE
{
printf '%b' ""
return
}
...
}
它是一个 compound-list,是的,这些命令在子 shell 中 运行。为避免这种情况,请使用花括号代替圆括号:
{ is_running_interactively && is_tput_available; } || ...
我正在尝试理解,即使可以做到,我还能避免 subshell 吗?
这是编写代码的唯一方法还是有其他方法?
我尝试使用大括号 { ... }
,但它无法通过 shellcheck,也不会 运行。
is_running_interactively ()
# test if file descriptor 0 = standard input is connected to the terminal
{
[ -t 0 ]
}
is_tput_available ()
# check if tput coloring is available
{
command -v tput > /dev/null 2>&1 &&
tput bold > /dev/null 2>&1 &&
tput setaf 1 > /dev/null 2>&1
}
some_other_function ()
# so far unfinished function
{
# is this a subshell? if so, can I avoid it somehow?
( is_running_interactively && is_tput_available ) || # <-- HERE
{
printf '%b' ""
return
}
...
}
它是一个 compound-list,是的,这些命令在子 shell 中 运行。为避免这种情况,请使用花括号代替圆括号:
{ is_running_interactively && is_tput_available; } || ...