Bash 一个案例中有多个命令?
是否可以这样做:Bash 一个案例中有多个命令?,bash,Bash,是否可以这样做: case $ans1_1 in y)fedoraDeps;; echo "something here";; make -j 32;; n)echo "Continuing"...;; ;; *) echo "Answer 'y' or 'n'";; esac 其中fedoraDeps是带有yum命令的函数 我试图用案例来复制这一点: if [[ $ans1_1 = y ]]; then fedo
case $ans1_1 in
y)fedoraDeps;;
echo "something here";;
make -j 32;;
n)echo "Continuing"...;;
;;
*) echo "Answer 'y' or 'n'";;
esac
其中
fedoraDeps
是带有yum
命令的函数
我试图用案例来复制这一点:
if [[ $ans1_1 = y ]]; then
fedoraDeps
echo "something here"
make -j 32
elif [[ $ans1_1 = n ]]; then
echo "Continuing..."
:
else
echo "Answer 'y' or 'n'"
fi
代码>或换行用于结束命令<代码>代码>用于结束案例分支。只是不要在每次命令后都试图结束case分支,这很好:
case $ans1_1 in
y)
fedoraDeps
echo "something here"
make -j 32 ;;
n)
echo "Continuing"... ;;
*)
echo "Answer 'y' or 'n'" ;;
esac
由于shell行为的不同,我建议在分号之前使用空格。。。
单个“;”考虑到你想要什么。双“;”结束“案例”匹配,即
这应该起作用:
case $ans1_1
in
y) fedoraDeps ;
echo "something here" ;
make -j 32 ;; ## last command for case 'match'
n) echo "Continuing"... ;;
## if you want a blank line then just use one
*) echo "Answer 'y' or 'n'" ;;
esac
代码>结束一个案例。不要把它放在每一行的末尾,只放在每一行的最后一行。只需谷歌“bash case statement”了解更多细节。完全猜测,但您是否尝试过使用单个
来分隔命令,而不是双代码>结束这个案例?或者,在这个问题上,让newline不使用代码>定界命令,我想它会出现在脚本文件中代码>在一行上,使其更加突出。在前面插入空格
应该没有什么区别。shell没有处理什么代码>作为一个控制字符,允许它成为前面单词的一部分?嗯,合理的注释;在与多种风格的*Nix(或类似于*Nix的OSs&Shell)合作约30年后,我的经验反映了我所遇到的情况,即如果我们将讨论限制在当前版本的Bash上,那么是的,评论是有效的,我的评论可以忽略不计。:)使用LF
是否会导致便携性问题?该脚本在FreeBSD、Debian、Fedora和RHEL中的工作方式是否完全相同?该语法在所有POSIX兼容的shell中都能正常工作。FreeBSD是否有名为fedoraDeps
的命令是另一回事。fedoraDeps
是在文件顶部定义的函数,因此它不会导致任何问题,谢谢!