【问题标题】:quote the unquoted variables in the shell script引用 shell 脚本中未加引号的变量
【发布时间】:2016-04-25 14:42:58
【问题描述】:

我们开始使用shellcheck 来检查我们的脚本是否有错误/警告,

现在我们在所有脚本中看到的常见警告是未引用的变量。
是否有任何脚本可以纠正这些简单的警告/错误?
我有以下命令,用于将 $VAR 更改为 ${VAR}

sed -i -r 's:\$([_a-zA-Z?][_a-zA-Z0-9]*):${\1}:g' <scriptname>

我修改如下,
sed -i -r 's:\$([_a-zA-Z?][_a-zA-Z0-9]*):"${\1}":g' <scriptname>

当变量没有被引用但被引用时,上面的命令可以正常工作,例如"$VAR" 变为 ""${VAR}""

关于是否继续使用sed 或更好地编写脚本来做的任何建议?

有什么特别的建议吗?

【问题讨论】:

  • 检查是否已经有引号。 's/"*yadda"*/"yadda"/'
  • 引用变量是一个基本的,有用的东西要记住。如果您忘记了它而仅仅依靠一个小脚本来执行它,那么您将面临风险:脚本失败的风险并且您认为其他事情可能是错误的,忘记引用变量这一原则而不考虑的风险。这就像编写一个系好安全带的脚本:我认为当你在飞机上坐下时记住这样做会更好。
  • @fedorqui 问题是当我们开始工作时,我们都是新手,在此期间我们有所改进,但现在我们有许多脚本需要修改,我们会审查它们,但更改每一行有点无聊,所以考虑使用脚本来做到这一点。
  • 我有一个大致相当于你的脚本,但它不会尝试添加双引号,因为没有简单的方法来确保它被正确处理。如果您使用vim(或vi),您可以相对轻松地创建一个缩写,在必要时添加双引号(在您已经运行$a${a} 转换器之后。例如::map v /${[^}]*}/^V^Mi"^VESCll%a"^VESC (其中 ^V、^M 是 control-V 和 control-M,而 ESC 是转义键)。或者您可能更愿意将搜索与替换操作分开——这有其优点。

标签: bash shell sh busybox


【解决方案1】:

仔细编辑。
当您写 echo "This is example ${var} in the middle of the line" 时,您不想在 ${var} 周围加上引号。
您应该将所有变量(PATH、PWD 和其他一些系统变量除外)都用小写字母。 您可能想在.vimrc 中添加一些映射,这将使用 F4 或 F5(类似于. ! ~/bin/make_my_var)执行您的 sed 第一个或第二个命令行,从而使编辑更容易。在make_my_var 中,当变量不是异常列表之一时,您可以添加逻辑以将变量小写。 和(编辑): 您可能需要更多标准,或许使用styleguide

【讨论】:

    猜你喜欢
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    相关资源
    最近更新 更多