【问题标题】:How to run an url in google chrome using variables in bash script如何使用 bash 脚本中的变量在谷歌浏览器中运行 url
【发布时间】:2021-05-09 20:09:42
【问题描述】:

您好,我是新手,正在学习 shell 命令。当我将它作为单行命令尝试时,它可以工作,但是当我将命令和路径存储到两个变量中并调用它时,它不起作用。

google-chrome /home/bashscripts/index.html

输出:chrome 打开 /home/bashscripts/index.html (WORKS)

我想通过变量来实现什么:

A="google-chrome"
B="/home/bashscripts/index.html"

$C= echo $(eval $A) $B **(DOESNOT WORK)**
echo $C

输出:bash 打开 google-chrome 空白新标签,但未打开 html 文件。

【问题讨论】:

    标签: linux bash ubuntu


    【解决方案1】:

    你的脚本应该是:

    A="google-chrome"
    B="/home/bashscripts/index.html"
    C=$(eval $A $B) 
    echo "$C"
    

    tldp:Variable Assignment

    【讨论】:

      【解决方案2】:

      这将起作用:

      #!/bin/bash
      
      A="google-chrome"
      B="/home/bashscripts/index.html"
      
      "$A" "$B"
      

      但是,我建议不要将命令(如google-chrome)存储在变量中;像这样的简单命令可以完成,但是tends to fail for complex commands。变量用于数据(如文件名),而不用于可执行命令。此外,使用小写或混合大小写的变量名称通常更安全,因为有一堆具有特殊含义的全大写名称,如果您不小心将其中一个用于其他用途,您可能会遇到麻烦。

      脚本中的其他所有内容都过于复杂,而且大部分都做错了:

      • 要将某些内容存储在变量中,请使用varname=$(command),而不是$varname= command——$= 后面的空格都改变了命令的含义,您需要$( ) 来捕获输出命令。
      • 此外,您几乎不应该使用$(echo something),因为echo$( ) 基本上相互抵消。
      • 而且您不应该在没有充分理由的情况下捕获命令的输出。如果您只是要打印输出(例如echo $C),那么只需跳过捕获它并让它直接打印。
      • 当您确实需要打印一个变量,或者在几乎任何上下文中实际使用它时,您应该在它周围加上双引号以避免奇怪的解析(例如,echo "$C" 而不是 echo $C)。
      • 请勿使用eval,除非您是shell 解析工作原理的专家。这基本上是一个奇怪的解析错误的邀请,几乎从来没有必要。

      最后,我建议通过shellcheck.net 运行您的脚本,因为它会指出许多常见的脚本错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-08
        • 2017-09-25
        • 1970-01-01
        • 2021-12-08
        • 2012-10-19
        • 1970-01-01
        • 2014-02-24
        相关资源
        最近更新 更多