将变量保存到配置文件的 Bash if 语句不起作用

Posted

技术标签:

【中文标题】将变量保存到配置文件的 Bash if 语句不起作用【英文标题】:Bash if statement which saves variable to config file doesn't work 【发布时间】:2013-05-08 03:35:31 【问题描述】:

这是我的代码:

alias radio='
if [ -e "$station" ]
then
    open $station
else
    say "I still don't know what your favorite radio station is sir. Would you mind giving me the link?"
    echo "What is the link of your favorite station?"
    read station
    echo "station="$station"" >> ~/.fis/config
    say "You can now try the command again."
fi'

代码运行到它要求链接的部分。当我向它提供链接时,我收到以下错误:

-bash: station=http://www.cidadefm.iol.pt/player/player.html?: 没有那个文件或目录

有人知道可能出了什么问题吗?

【问题讨论】:

say 是 unix 命令吗? @Bill 这是一个 mac 命令。不确定是否在所有 unix 发行版中都可用。 出于好奇...您在运行脚本的当前目录中是否有文件./http://www.cidadefm.iol.pt/player/player.html (open $station) @Bill 很有趣,但我的理解是 open 命令可以打开与您的主浏览器的链接,当我直接在终端中使用它时它可以工作。显然,在将链接分配给station 时我做错了,但我不确定我到底做错了什么。 这是来自man页面open -- open - Open a file-based or command pipeline channel 【参考方案1】:

主要问题是您在引号之外使用$station。可能有一个& 破坏了命令。

您似乎将“站”变量名称用于两个不同的目的。这令人困惑。

另外,将所有这些都放入别名中有点尴尬。我会使用一个函数

radio () 
    local file=~/.fis/config
    if [ -f "$file" ]
    then
        station=$(< "$file")
    else
        say "I still don't know what your favorite radio station is sir. Would you mind giving me the link?"
        echo "What is the URL of your favorite station?"
        read staton
        echo "$station" > "$file"
    fi    
    open "$station"

【讨论】:

好吧,我认为问题可能与 $station 不是文件,而是字符串有关。 -e 是检查字符串是否存在的正确方法吗?感谢大家的帮助 检查字符串是否为非空,使用if [[ -n "$string" ]] -- 见gnu.org/software/bash/manual/… 谢谢兄弟!你解决了我的问题!【参考方案2】:

WhatsWrongWithMyScript.com 有用地指出“不要”中的撇号正在终止单引号表达式。请不要使用“don'\''t”来解决此问题,而是使用函数:

radio() 
  if [ -e "$station" ]
  then
      open $station
  else
      say "I still don't know what your favorite radio station is sir. Would you mind giving   me the link?"
      echo "What is the link of your favorite station?"
      read station
      echo "station=\"$station\"" >> ~/.fis/config
      say "You can now try the command again."
  fi

【讨论】:

以上是关于将变量保存到配置文件的 Bash if 语句不起作用的主要内容,如果未能解决你的问题,请参考以下文章

bash循环语句

配置变量与语句

将变量与字符串 bash 进行比较

linux sh 读取文件内容,if判读语句,变量var打印

Bash:将变量插入到 curl 调用中不起作用[重复]

如何修改 ubuntu 环境变量