相关疑难解决方法(0)

忘记在 bash/POSIX shell 中引用变量的安全隐患

如果您已经关注 unix.stackexchange.com 一段时间了,那么您现在应该知道,echo $var在 Bourne/POSIX shell(zsh 是例外)中的列表上下文(如)中不加引号的变量具有非常特殊的含义,并且除非你有很好的理由,否则不应该这样做。

在这里的许多问答中详细讨论了它(例如:为什么我的 shell 脚本会因空格或其他特殊字符而窒息?何时需要双引号?shell 变量的扩展以及 glob 和 split 对其的影响引用vs 不带引号的字符串扩展)

自从 70 年代末 Bourne shell 首次发布以来就是这种情况,并且没有被 Korn shell 改变(David Korn 最大的遗憾之一(问题 #7))或者bash大部分复制了 Korn shell,这就是POSIX/Unix 是如何指定的。

现在,我们仍然在这里看到许多答案,甚至偶尔会公开发布未引用变量的 shell 代码。你会认为人们现在已经学会了。

根据我的经验,主要有 3 类人会省略引用他们的变量:

  • 初学者。这些可以被原谅,因为它是一种完全不直观的语法。我们在这个网站上的职责是教育他们。

  • 健忘的人。

  • 即使经过反复锤击也不相信的人,他们认为Bourne shell 的作者肯定没有打算让我们引用所有变量

如果我们揭露与此类行为相关的风险,也许我们可以说服他们。

如果您忘记引用变量,那么最糟糕的事情是什么。真的有那么糟糕吗?

我们在这里谈论什么样的漏洞?

在什么情况下会出现问题?

shell security bash shell-script quoting

241
推荐指数
3
解决办法
3万
查看次数

列出按数字排序的文件

我有一堆从log1log164.

我正在尝试在 UNIX 终端中列出目录(已排序),但排序功能仅提供如下格式:

home:logs Home$ ls -1 | sort
log1.gz
log10.gz
log100.gz
log101.gz
log102.gz
log103.gz
log104.gz
log105.gz
log106.gz
...etc
Run Code Online (Sandbox Code Playgroud)

我想要的是

home:logs Home$ ls -1 | sort
log1.gz
log2.gz
log3.gz
log4.gz
log5.gz
log6.gz
log7.gz
...{more here}
log99.gz
log100.gz
log101.gz
log102.gz
...etc
Run Code Online (Sandbox Code Playgroud)

我可以用来做什么的任何建议?

ls filenames sort numbering

172
推荐指数
6
解决办法
14万
查看次数

如何按正确的数字顺序对文件名进行排序

如何解决文件名顺序问题?

例如,

ls
Run Code Online (Sandbox Code Playgroud)

生成文件如下:

basename1
basename11
basename12
basename13
[omitted]
basename2
basename20
basename21
....
basename3
Run Code Online (Sandbox Code Playgroud)

问题

11-19 在 2 和 3 之前解析。

files

1
推荐指数
1
解决办法
1575
查看次数

标签 统计

bash ×1

filenames ×1

files ×1

ls ×1

numbering ×1

quoting ×1

security ×1

shell ×1

shell-script ×1

sort ×1