使用可以 return 成功或失败的函数以及列表的 zsh 习语是什么
What is the zsh idiom for using functions that can return success or failure as well as a list
我正在寻找“最佳方式”或公认的 zsh 习惯用法来创建和使用可以 return 成功或失败以及列表或其他文本值的函数。
目前我正在这样做:
function happy
{
local happy_list=( a b c d )
if true ; then
echo $happy_list
return 0
else
return 1
fi
}
function sad
{
local sad_list=( a b c d )
if false ; then
echo $sad_list
return 0
else
return 1
fi
}
echo happy
if happy_result=( $( happy ) ) ; then
echo '$?:' $?
echo '$#happy_result' $#happy_result
echo '$happy_result' $happy_result
echo '$happy_list:' $happy_list
else
echo '!?!?!?!?'
fi
echo
echo sad
if sad_result=( $( sad ) ) ; then
echo '!?!?!?!?'
else
echo '$?:' $?
echo '$#sad_result' $#sad_result
echo '$sad_result:' $sad_result
echo '$sad_list:' $sad_list
fi
这导致
happy
$?: 0
$#happy_result 4
$happy_result a b c d
$happy_list:
sad
$?: 1
$#sad_result 0
$sad_result:
$sad_list:
有没有更干净的方法?特别是 foo=( $( func ) )
语法似乎可以改进,因为列表已经在函数中创建。
版主更新:我相信现在这是 this question and my preferred answer (if anyone cares) is this answer 的副本。 Meta 中的建议是关闭并合并。我不知道如何进行合并。版主可以帮帮我吗?
zsh
中的惯用法是 return 标量结果在 $REPLY
变量中,数组结果在 $reply
数组中:
all-files-in() {
reply=( $^@/*(ND) )
(( $#reply ))
}
if all-files-in /foo /bar; then
print -r there were files: $reply
else
print -ru2 there were none
fi
另一种方法是调用者指定存储结果的变量名,并使用eval
或P
参数扩展标志进行间接赋值。
all-files-in() {
eval ='( $^@[2,-1]/*(ND) )
(( $#'' ))'
}
if all-files-in files /foo /bar; then
print -r there were files: $files
else
print -ru2 there were none
fi
我正在寻找“最佳方式”或公认的 zsh 习惯用法来创建和使用可以 return 成功或失败以及列表或其他文本值的函数。
目前我正在这样做:
function happy
{
local happy_list=( a b c d )
if true ; then
echo $happy_list
return 0
else
return 1
fi
}
function sad
{
local sad_list=( a b c d )
if false ; then
echo $sad_list
return 0
else
return 1
fi
}
echo happy
if happy_result=( $( happy ) ) ; then
echo '$?:' $?
echo '$#happy_result' $#happy_result
echo '$happy_result' $happy_result
echo '$happy_list:' $happy_list
else
echo '!?!?!?!?'
fi
echo
echo sad
if sad_result=( $( sad ) ) ; then
echo '!?!?!?!?'
else
echo '$?:' $?
echo '$#sad_result' $#sad_result
echo '$sad_result:' $sad_result
echo '$sad_list:' $sad_list
fi
这导致
happy
$?: 0
$#happy_result 4
$happy_result a b c d
$happy_list:
sad
$?: 1
$#sad_result 0
$sad_result:
$sad_list:
有没有更干净的方法?特别是 foo=( $( func ) )
语法似乎可以改进,因为列表已经在函数中创建。
版主更新:我相信现在这是 this question and my preferred answer (if anyone cares) is this answer 的副本。 Meta 中的建议是关闭并合并。我不知道如何进行合并。版主可以帮帮我吗?
zsh
中的惯用法是 return 标量结果在 $REPLY
变量中,数组结果在 $reply
数组中:
all-files-in() {
reply=( $^@/*(ND) )
(( $#reply ))
}
if all-files-in /foo /bar; then
print -r there were files: $reply
else
print -ru2 there were none
fi
另一种方法是调用者指定存储结果的变量名,并使用eval
或P
参数扩展标志进行间接赋值。
all-files-in() {
eval ='( $^@[2,-1]/*(ND) )
(( $#'' ))'
}
if all-files-in files /foo /bar; then
print -r there were files: $files
else
print -ru2 there were none
fi