如何使用bash脚本中的变量在googlechrome中运行url



你好,我是新来的,正在学习shell命令。当我尝试将其作为单行命令时,它是有效的,但当我将命令和路径存储到两个变量中并调用它时,它不起作用。

google-chrome /home/bashscripts/index.html

输出:chrome-opens/home/bashscripts/index.html(WORKS(

我想通过变量实现的目标:

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

输出:bash打开googlechrome空白新选项卡,但html文件未打开。

这将起作用:

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

但是,我建议不要将命令(如google-chrome(存储在变量中;对于像这样的简单命令可以这样做,但对于复杂的命令往往会失败。变量用于数据(如封地(,而不用于可执行命令。此外,使用小写或混合大小写的变量名通常更安全,因为有一堆具有特殊含义的全大写名称,如果你不小心将其中一个用于其他用途,你可能会遇到麻烦。

脚本中的其他一切都不必要地复杂,而且大多数都是错误的:

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

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

您的脚本应该是:

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

变量分配

相关内容

  • 没有找到相关文章

最新更新