我对bash并不熟悉。我有一个场景,我用一些参数调用一个函数,并将返回值赋给一个变量。使用参数调用函数而不使用子shell - bash
下面是一个示例代码:
function f1() {
if [[ $1 =~ $IP_REGEX ]]
then
return 0
else
echo 'Invalid IP'
exit 1
end
}
function f2() {
# read ip from json file using jq
local config=<read config>
# validate ip by calling f1 if second argument passed to f2 is 'ip'
[[ $2 == "ip" ]] && f1 $config
echo $config
}
function read_all_configs() {
pxe-ip=$(f2 'pxe-ip' 'ip')
}
的问题是检测到错误的IP时,变量“PXE-IP”分配值“无效的IP”,因为F2正在从叫subshell,是否有可能使用同一个shell中的参数调用函数?
您不能将它PXE的IP,而在同一个shell中运行它,即使在子shell中,它的运行方式也不应该有任何区别...... – 123
您可能应该将错误消息写入stderr:'echo'无效IP'>&2'(以及阅读sorontar的答案)。 –