首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在传递ShellCheck时通过环境变量将glob传递给shell脚本

如何在传递ShellCheck时通过环境变量将glob传递给shell脚本
EN

Stack Overflow用户
提问于 2017-08-29 05:51:04
回答 1查看 521关注 0票数 7

假设我有一个shell脚本,test.sh,它应该回显一些值。我希望能够通过带有glob扩展的环境变量传递这些值:

代码语言:javascript
运行
复制
$ ls
1.js  2.js  test.sh*

$ FOO="*.js" bash ./test.sh
1.js 2.js

放轻松,你说的!只管写

代码语言:javascript
运行
复制
#!/bin/bash
echo $FOO

事实上,这是可行的。但是它没有通过ShellCheck,这就要求我们使用隐式全局/扩展(SC2086)。(这是公平的;在最初的代码中,回显行是cp $FOO $BAR,实际上我们不想展开$BAR;这个错误捕获错误。)

因此,为了使这一点更加明确,我希望以下几点能够奏效:

代码语言:javascript
运行
复制
#!/bin/bash
array=( $FOO )
echo "${array[@]}"

但不是:我们最终得到了SC2206

是否有一种规范的方法来做这类事情,这属于ShellCheck作者认为的最佳实践?(可以随意使用www.shellcheck.net的在线检查器进行测试。)这是完全错误的做法吗?ShellCheck作者似乎从未想过这个用例.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-29 08:12:44

在这种情况下,ShellCheck的警告似乎没有一个安全的解决办法。然而,ShellCheck的诊断并不是普遍的真理。正如您可能已经注意到的,它的一些警告的文档包括一个异常部分。对于SC2206,它的内容如下:

例外情况: 如果您已经注意到(通过设置IFSset -f)使分字工作按您的意愿进行,那么可以忽略这个警告

现在,ShellCheck提供了一个逐个案例忽略警告的指令

Shellcheck指令允许您选择性地忽略警告,并采取文件中的注释形式: hexToAscii() {# shellcheck disable=SC2059 printf "\x$1“} 支持的指令是

  • disable禁用警告:外壳检查disable=code,代码.statement_where_warning_should_be_disabled...

指令而不是直接应用于整个脚本。否则,它们的作用域将被限定为它后面的结构(例如一个case语句的所有分支,或整个函数)。

因此,您可以将您的警告抑制如下:

代码语言:javascript
运行
复制
#!/usr/bin/env bash

# The following line is needed so that the shellcheck directive
# below doesn't have global effect
:

# shellcheck disable=SC2206
array=( $FOO )
echo "${array[@]}"
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45931553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档