ShellCheck 警告:“删除周围的 $() 以避免执行输出。[SC2091]”

Posted

技术标签:

【中文标题】ShellCheck 警告:“删除周围的 $() 以避免执行输出。[SC2091]”【英文标题】:ShellCheck warning: "Remove surrounding $() to avoid executing output. [SC2091]" 【发布时间】:2018-05-20 12:43:49 【问题描述】:

我的脚本中有以下命令集:

message="Secure copying file $remoteHost"
backupLogOutput "Info $message"
$(scp  "$file" "$remoteUser"@"$remoteHost":"$remotePath")  >> "$BACKUPLOG"
backupErrorHandler "$?" "$message"

ShellCheck 在 scp 行 (3) 上给我警告:

删除周围的 $() 以避免执行输出。 [SC2091]

脚本有效。我确实想执行输出。我应该忽略这个警告还是应该以不同的方式编写 scp 行?

【问题讨论】:

cmets 防止执行任意输出,实际上$(..) 之间的命令就像在反引号之间,它被扩展为输出,然后shell 将这个输出分成命令和参数,试试$(echo "/bin/ls -l") 【参考方案1】:

我认为您实际上并不想执行 scp 输出的内容 - 它看起来更像是您只是想复制一个文件:

scp  "$file" "$remoteUser"@"$remoteHost":"$remotePath"  >> "$BACKUPLOG"

【讨论】:

以上是关于ShellCheck 警告:“删除周围的 $() 以避免执行输出。[SC2091]”的主要内容,如果未能解决你的问题,请参考以下文章

调整语法检查器 shellcheck 的突出显示颜色(带有合成和病原体)

如何删除环境变量的“SC2154”警告[关闭]

所有没有扩展名的文件的shellcheck vscode“shellcheck.ignorePatterns”

如何明确故意分词?

Centos安装shellcheck的方法

在 Jenkins 中记录 shellcheck 结果