【发布时间】:2014-03-20 23:21:37
【问题描述】:
我试图让这个 bash 脚本只写在一行中。主要是为了好玩。
该脚本基本上编译了一个.c 脚本if($1=0)。而if($1=1),它会检查lifemp 是否存在,如果不存在,则编译它,然后使用2nd - 5th 命令行参数运行lifemp。
这是带有正常 if 语句的工作脚本:
#!/bin/bash
cd gol
if [ $1 -eq 0 ]; then
make clean
make lifemp USE_FILE=$2
elif [ $1 -eq 1 ]; then
if [ ! -f lifemp ]; then
make lifemp
fi
./lifemp $2 $3 $4 $5
fi
这是我仅在一行中提出的。
如果$1 = 0,则运行良好。当$1 = 1 时问题就来了。
我认为这与我有一个嵌套的三元表达式来检查 lifemp 文件是否存在有关。
#!/bin/bash
cd gol && eval `[[ $1 = "1" ]] && (echo [[ ! -f lifemp ]] && (echo "make lifemp && ./lifemp $2 $3 $4 $5") || ("./lifemp $2 $3 $4 $5")) || (echo "make clean && make lifemp USE_FILE=$2")`
如果有人想和我一起绞尽脑汁想办法解决,我将不胜感激!
谢谢!
【问题讨论】:
-
bash没有三元运算符。&&和||运算符链的优先级与 C 中的不太一样;只有a成功,a && b || c才会运行b,但a成功并且b随后失败,c也会运行。
标签: bash ternary-operator ternary