我正在尝试编写一个 bash 脚本来管理用户配置文件的设置。我似乎无法弄清楚为什么这个 if 语句不起作用。我有代码:
#!/bin/bash
#check if programs are installed
( TMUX=$(tmux -V) && echo "tmux at version $TMUX" ) || echo "tmux not installed"
if [ $TMUX != "1.8" ]; then
echo "installing tmux"
fi
但无论我怎么尝试,我总是得到错误
test.sh: line 6: syntax error near unexpected token `fi'
test.sh: line 6: `fi'
对于可能造成这种情况的原因有什么想法吗?
答案1
如果您运行tmux -v
并且tmux
未安装,您将收到错误。在子 shell 中分配变量也意味着除非导出,否则它永远不会在外部定义。请尝试使用以下命令检查它which
:
TMUX="$(which tmux > /dev/null && tmux -v)"
if [ "$TMUX" != "1.8" ]; then
echo "installing tmux"
fi
字符串比较test
需要您引用你的论点,否则你会得到一个关于预期一元运算符来自 Bash。
答案2
从您的代码来看,您似乎在子 shell 中设置了 TMUX 的值,因此在 if 语句中不会定义该值。由于您实际上是在执行带有未设置变量的 if 语句,因此这会导致语法错误。我看不出您在第一行代码中设置子 shell 有什么理由。即使没有它,代码也能正常工作。