我正在考虑使一个大型代码库shellcheck的所有bash脚本都符合要求,但是这项任务很繁琐,因为历史上有太多的开发人员忽略了所有shell脚本中的第一个规则:始终使用引号。
如果有一个至少可以解决该报价问题的工具,将会很有帮助。然后,我将可以手动修复其余部分。我的正则表达式没有删减它,因为只有字符串中没有的变量必须被引用。
输入样例:
echo "Removing $a ${b} $(c $(c)) `d $d` ${10} $@ now"
rm -rf $a ${b} $(c $(c)) `d $d` ${10} $@
样本输出:
echo "Removing $a $b $(c "$(c)") `d "$d"` ${10} $@ now"
rm -rf "$a" "$b" "$(c "$(c)")" "$(d "$d")" "${10}" "$@"
它不必修复以上所有问题,甚至不必完美无瑕(尽管那确实很不错),但是它必须经常正确而不是有用。
这是我朴素的正则表达式,并没有减少它:
s:([^"])\$\{([_A-Za-z0-9]+)\}([^"]|$):\1"\$\2"\3:g
它将$ {identifier}转换为“ $ identifier”,除非在引号前或后立即加引号,但无法检测到我们是否在字符串中更深。
WPomier击败了我,但我也做了我自己的(因为我想这样做):https :
//github.com/anordal/shellharden
在您为其提供--transform
选项之前,它充当语法突出显示器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句