[英]Bash Nested Private Functions
我試圖創建一個自定義的Mac Terminal命令, start
,在Terminal中,我的意圖是編寫$ start func1 subfunc myText
,其中func
是start.sh文件中的一個函數, subfunc
僅是在func
中的一個函數,只能從func
中func
。 因此$ start subfunc myText
是不可能的。 我看到有可能從另一個函數( 這里 )傳遞一個函數,但前提是兩者都在start.sh文件的外部范圍內。
基本上:
start.sh:
function func(){
function subfunc(){
echo $1
}
}
然后在終端中: $ start func subfunc Hey
打印嘿
您需要調用函數,而不僅僅是聲明它們:
func() {
subfunc() {
echo "$1"
}
"$@"
}
"$@"
但是函數沒有作用域,因此一旦在另一個函數中聲明該函數,它將覆蓋之前的聲明。 因此,我建議這樣使每個功能和子功能名稱唯一。
f() {
f() {
echo in
}
echo out
}
f // will print 'out'
f // will print 'in'
請注意,使用function name() {}
是可以接受的,但並非真正有效 。 使用name() { }
,因為posix未指定function name {}
。
您不需要為此的嵌套函數。 我認為這是一個參數解析問題:
#!/bin/bash
start() {
case $1 in
func) shift; do_func "$@" ;;
*) echo "unknown subcommand"; exit 1 ;;
esac
}
do_func() {
case $1 in
subfunc) shift; do_subfunc "$@" ;;
*) echo "unknown sub-subcommand"; exit 1 ;;
esac
}
do_subfunc() {
echo "$1"
}
start "$@"
然后
$ ./start func foo
unknown sub-subcommand
$ ./start func subfunc 'hello world'
hello world
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.