求助,ubuntu程序文件夹中出现名字奇怪的文件,是什么?
如题,无意到翻到usr/bin文件夹下,有个名为"["的执行文件,估计名字问题,网上也搜不到这个文件是干嘛的!https://www.man7.org/linux/man-pages/man1/test.1.html 没想到吧,脚本里的方括号不一定是shell内置的语法
—— 来自 Xiaomi 2211133C, Android 13上的 S1Next-鹅版 v2.5.4 因为[是命令,]是它的参数 tldr [
[
检查文件类型,比较数值。
如果条件计算结果为真返回 0,如果计算结果为假返回 1。
更多信息:https://www.gnu.org/software/bash/manual/bash.html#index-test.
- 测试一个给定的变量是否等于/不等于指定的字符串:
[ "$变量" ==|!= "字符串" ]
- 测试一个给定的变量是否等于/不等于/大于/小于/大于等于/小于等于指定的数字:
[ "$变量" -eq|ne|gt|lt|ge|le 数字 ]
- 测试指定的变量的值是否非空:
[ -n "$变量" ]
- 测试指定变量的值是否为空:
[ -z "$变量" ]
- 测试指定文件是否存在:
[ -f 路径/到/文件 ]
- 测试指定目录是否存在:
[ -d 路径/到/目录 ]
- 测试指定文件或目录是否存在:
[ -e 路径/到/文件或目录 ]
注意:您的 shell 可能内置了自己的 test 和/或 [ 程序版本,它通常会取代这里所描述的
版本。请查阅您的 shell 的文档以了解内置版本所支持的选项。一直用的语法居然并不一定是语法
本帖最后由 Midnight.Coup 于 2023-12-14 15:51 编辑
Linux 命令行,很神奇吧(刃牙.jpg) 想出这个点子一定是天才程序员
惊了 本帖最后由 ltycomputer 于 2023-12-14 16:49 编辑
搜了下我所知道的shell都是内置test的,不过busybox带的ash和hush默认不带,为了节省空间
https://p.sda1.dev/14/5b70226696f5d1969d9b653a58d14b35/mmexport1702542250244.png
但编译的时候还真能选不内置test
以前8M存储32M内存就能跑起openwrt,为了缩小体积真是无所不用其极
我好像知道为啥某些脚本在openwrt上跑不起来的原因了
但在有图形化界面的普通Linux发行版看到这玩意,的确有种Win11里看到win95代码的奇观。 第一次发现这事确实挺意外的,不过现在个人 pc 最起码都是 bash,语言本身就有 [[ ]] 测试,很少见纯粹的 sh 脚本了,这东西实际在 pc 上应该用得不多,可能在一些受限环境内用得比较多吧。
—— 来自 Xiaomi M2012K11AG, Android 13上的 S1Next-鹅版 v2.5.4 我还挺喜欢这个命令的,可以用来代替 if
[ -d "foo" ] && pushd foo 学到了 虽然现在sh基本都是bash的symlink,不过sh模式下which \[ 了一下还真是/usr/bin/[
shebang是sh的脚本应该还是挺主流吧,那这个用的意外的多 posthoc 发表于 2023-12-14 20:37
虽然现在sh基本都是bash的symlink,不过sh模式下which \[ 了一下还真是/usr/bin/[
shebang是sh的脚本应该还 ...
你再 `file /usr/bin/\[` 一下,八成是 symlink 到 coreutils 上的 萌名雪 发表于 2023-12-14 04:44
你再 `file /usr/bin/\[` 一下,八成是 symlink 到 coreutils 上的
opensuse 风滚草,就是普通的ELF 萌名雪 发表于 2023-12-14 20:44
你再 `file /usr/bin/\[` 一下,八成是 symlink 到 coreutils 上的
[本来就是coreutils的一个命令,为啥要symlink? tsubasa9 发表于 2023-12-14 21:03
[本来就是coreutils的一个命令,为啥要symlink?
我的我的。 coreutils 一般有两种打包方法:一个个分开的二进制,或者一个 `coreutils` 二进制被 symlink 成不同的命令。 coreutils 知道自己是以什么名义被 call 的(也就是 argv)。我 NixOS 是后者 哇 你们Linux实在是太神奇辣
— from Xiaomi 23127PN0CC, Android 14 of S1 Next Goose v2.5.2-play 天才的想法,酷
论坛助手,iPhone 一点类 unix 的小小震撼。
其实换到编程语言中并不意外吧,毕竟很多语言都支持运算符重载,中括号可以作为运算符当然也能当命令。 基本功能可以用库实现,而不是内置的特殊语法,这就是现代编程语言的优势啊
比如 Golang 的 map 的语法而不是库,就经常被喷。 感谢各位指点,真给我一点 linux 的震撼了。最近在给自已配置一个jupyterlab环境,真是累死了。发觉自由度很高,但很不傻瓜化。现在发现s1居然有这多么linux高手,感觉像找到组织了。 才知道,学习了 这就好像发现自己用了好久的“原生”应用是拿浏览器套皮出来的一样
页:
[1]