当 cd 命令失败时,我想让我的脚本退出并显示一条消息。我尝试通过执行以下操作:
cd $foo || echo "Error xyz"; exit 1
Run Code Online (Sandbox Code Playgroud)
但是,无论 cd 是否成功,都会调用 exit。当我键入以下内容时,它也不起作用,因为 exit 仅退出子外壳:
cd $foo || ( echo "Error xyz"; exit 1 )
Run Code Online (Sandbox Code Playgroud)
如何在不定义函数的情况下实现所需的行为?当然,我可以将 $(pwd) 与 $foo 进行比较,但这可能会导致有关符号链接和其他内容的问题。
您可以使用{ list; }复合命令。命令列表在当前 shell 上下文中执行:
cd "$foo" || { echo "Error xyz"; exit 1; }
Run Code Online (Sandbox Code Playgroud)
(注意需要尾随分号或换行符。)
最常见的函数定义bash通常对“函数体”使用这个复合命令:
f() { list; }
Run Code Online (Sandbox Code Playgroud)
但是,bash可以使用任何复合命令为其主体定义函数,例如:
f() ( list; )
f() (( $1 > 10 ))
f() [[ $1 != "test" ]]
Run Code Online (Sandbox Code Playgroud)
甚至:
f() for i in {1..10}; do echo $i; done
f() case ... esac
Run Code Online (Sandbox Code Playgroud)