V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  wxf666  ›  全部回复第 16 页 / 共 27 页
回复总数  522
1 ... 12  13  14  15  16  17  18  19  20  21 ... 27  
2022-09-11 16:11:55 +08:00
回复了 wdc63 创建的主题 程序员 由两个整数生成一个独特的整数
@wdc63

> @LaTero 的算法应该不能保证结果是唯一的

这不就是你的 a*(b 的位数+1) + b 的二进制版么。。

要不,举个反例?
2022-09-11 15:47:32 +08:00
回复了 wdc63 创建的主题 程序员 由两个整数生成一个独特的整数
@wdc63 a, b 都在 10W 以下,那么共有 10W ^ 2 = 100 亿 种可能 > uint32 ≈ 42 亿,不可能不超出 int32 范围?
好奇,有这个需求,为啥会这样分表。。
2022-09-09 13:21:09 +08:00
回复了 wwwe 创建的主题 奇思妙想 摸鱼迎中秋,有奖猜数字
150
火绒不是有 安全工具 - 弹窗拦截 - 截图拦截 吗
2022-09-09 12:28:58 +08:00
回复了 1054850490 创建的主题 NAS 如何对文件进行查重
用 shell 写了一个:

功能:查找当前路径下所有 *.webm 文件,以文件名『 xxx 网页地址「 yyy 」.zzz 』中的「 yyy 」为分组依据,输出每组中(文件大小最小)的文件名

find . -name '*.webm' -printf '%s\t%p\n' | jq -Rsr '[capture("(?<size>\\d+)\\t(?<path>.*网页地址(?<key>.+)\\..+)"; "g")] | group_by(.key)[] | sort_by(.size | tonumber)[0].path'
2022-09-09 11:39:50 +08:00
回复了 Coolwinds 创建的主题 程序员 shell 小白请教一个脚本问题
可能 sshpass 有使用你的 stdin 吧
噢,有个变量名,4 楼改成 json_data[0][...
a[0]['rows'][0]['BillTypeOrg']

现在连 Python 基础知识都不熟悉了么。。
2022-09-07 14:53:39 +08:00
回复了 hideonwhere 创建的主题 问与答 (求助)请教一个 unbutu 删除大量文件的做法
find . -name 'xx.tar.bz2.*' -delete ?
2022-09-06 18:21:05 +08:00
回复了 simonlu9 创建的主题 程序员 mysql 怎么保证每次查出来的排名是一致的
@simonlu9 感觉和前几楼说的那样,在 ORDER BY 里加个 user_id 之类的字段就好
2022-09-06 17:41:34 +08:00
回复了 simonlu9 创建的主题 程序员 mysql 怎么保证每次查出来的排名是一致的
@simonlu9 还是没看懂。。举些例子吧,你希望是这样排名吗?

用户 ID  销售额 排名
———————————
 1  100  1
 2  100  1
 3    0  3
 4    0  3
 5    0  3
2022-09-06 17:25:03 +08:00
回复了 simonlu9 创建的主题 程序员 mysql 怎么保证每次查出来的排名是一致的
@simonlu9 啥意思。。

1. 你希望销售额相同的用户,他们的排名相同吗?

2. 你的 SQL 最里层的『 SELECT ... UNION SELECT ... ORDER BY ...』,每次获取,结果都一样吗?
@aloxaf 算交流吧,都一起骂了 bash 的难用的地方,@Jirajine 也介绍了 elvish 优越之处,我也有自己的保留意见


感觉我还能接受新鲜事物。不写脚本的话,尝试换下 shell 也是可以的(反正就自己用而已。好用就赚,难用就换~)


听你这么一说,会不会 @Jirajine 说的『 bash 的 glob 复杂』,其实是『 zsh 的 glob 复杂』的意思。。

原本我思来想去,即使算上 extended glob ,bash 的 glob 也和复杂沾不上边儿才对。。


elvish 不也是按照 \n 切割 (...) 嘛。。

反正被折磨多后,一般都用 "..." 包裹住就是了(然而还有个 ! 。。)
2022-09-06 16:59:45 +08:00
回复了 simonlu9 创建的主题 程序员 mysql 怎么保证每次查出来的排名是一致的
销售额都等于 0 时,排名不应该是一样的嘛。。

不考虑使用连 SQLite 都支持的窗口函数 rank() OVER(...) 嘛?
@Jirajine

> 变量名拼写错误会执行外部代码

🤔我还没怎么用过 xonsh ,也不知这种情况严不严重


> 脚本里有一大堆 ad-hoc 的 parse 和拼接字符串的代码,难写难读易错还不安全,远远不如直接操作结构化数据

✔️写脚本我就不用 bash 这坑爹玩意儿了,换个 Python 不香嘛。。


> 正则

🤔我还是坚持:交互式 shell 需要功能强大的正则


> quoting hell 指一次 evaluation 的结果再次被另一种相同或不同的规则 evaluate ,所以需要同时为多种规则 quoting 和转义

✔️噢,这种啊,确实绕脑袋

❓elvish 是咋解决的?


> glob

🔁我还是不知道你说的,bash 的 glob 比 elvish 复杂,是啥意思。。❓可以举些例子嘛?


> 这就是 IFS 和 word splitting 糟糕的地方,数据(变量值)影响语义,在代码的不同地方处理、存储、复制、传递含空格字符串,并保证结果正确是非常麻烦且恶心的

🔁IFS=$'\n' 后,❓不就可以像 elvish 那样,不用处理啥空格了嘛?

需要一个参数时:"$s"、"$(...)"

需要每行作为一个参数时:$s 、$(...)


> bash 的 array 不是一般的难用

✔️知道 bash 的 array 坑多。反正我一般绕过那些奇奇怪怪的用法,老老实实 "${arr[@]}" 之类的。。

我记得好像 ${arr[*]} 还是 "${arr[*]}" 来着,和 $* "$*" 有不同。。
2022-09-06 11:38:22 +08:00
回复了 listen2wind 创建的主题 MySQL 请教一个问题: mysql 中使用 group by 如何获取最新一条数据?
https://dev.mysql.com/doc/refman/8.0/en/example-maximum-column-group-row.html

文中说了 子查询、相关子查询、自连接、窗口函数 4 种方法
@Jirajine

> 充其量只能算是类似 ipython 的 ui

无所谓这些概念。🔁还是希望你能举些 xonsh 『语义严重不一致』的例子❓


> 但 bash 是语言内部都没有结构化数据,你就得一直拿字符串糊过来糊过去

✔️大部分同意。但如果只是 json 的话,jq 这个工具大部分时候还是足够使用的:

ip --json addr | jq -r '.[] | .ifname + " " + .addr_info[0].local'


> 正则搞得太“高级”,不符合 do one thing and do it well 的理念

我觉得还是『匹配某句法规则的字符串』范畴,且允许描述得更好了,还是符合理念的

换句话说,❓为何 go/rust 的正则库,就是按照“do one thing and do it well”理念设计的、shell 正则库的巅峰呢?

❓不能是 perl 的 pcre 嘛?


> 这些功能自己写代码实现可读性和心智负担都更好

🤔我不觉得我会自己实现 \p{Han}、a*?、a*+、(?>)、(?<!),心智负担很大。。

🤔也不觉得 [\u4e00-\u9fa5] 会比 \p{Han} 可读性好(其实前者只是后者的小子集,真实情况前者会很长)


> 这也是 go/rust/cpp 等语言的正则库只实现一部分特性的原因

🤔『线性时间复杂度』等特点,是高速应用的需求,但不该是交互式 shell 的


> quoting hell 了解一下,如果转义字符也需要转义。。

🔁再次重复:

'\' 中的转义字符,就是它自己,不是转义了 '。若要转义 ':

bash:'left'\''right'

elvish:'left''right'

实在不行,还有 Here Doc 嘛:

cat <<'EOF'
 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
EOF


> elvish 可没有 extended glob ,特殊字符也很少

bash 默认也不开启 extended glob 。。

❓要不你举些 bash 的 glob 比 elvish 复杂的例子出来吧


> a=$(ls) ; file $a # 这里是写$a 还是"$a"呢?

IFS=$'\n'

file $(ls)

❓突然想到,这样是不是就和 elvish 的 (...) 等价了?


> 日常使用结构化数据非常有用,尤其是数组

✔️确实,这些也应该是 shell 的基础设施。bash 能用,但用起来很累:

readarray -t arr < <(ls)

file "${arr[@]}"
@Jirajine 用了些 emoji 快速表明态度


> parser 太随意,一部分传给 python ,一部分传给 bash ,语义严重不一致。

我看它是,但凡 命令 和 参数 中,有出现未定义的标识符,就当作外部命令处理

感觉也说得过去?❓能举些你觉得容易出错的例子吗?


> 还是因为缺乏结构化数据类型,只能一边 parse 字符串,一边拼接出特定的字符串给别的程序 parse

elvish 能直接传递 list map 给其他命令?从其他命令接收来的 str ,不 parse ,咋变成 list map 的?

❓你是说 xml json 序列化、反序列化 这些库吗?


> go/rust 的正则库大差不差,功能完全够了吧

相比 pcre C# 而言,还差很多。😑你这样说,显得人家在不务正业。。


> 其他“高级特性”实现的话就做不到线性时间复杂度了

写应用确实速度快(是因为用 DFA 实现吗?)

但在 交互式 shell 中,更需要功能丰富啊

正则库不支持,❓不就要苦逼地写代码,自己实现相同逻辑了么。。


> 关键是它标准库有常用字符串和正则函数,这些 bash 根本实现不了

✔️确实,字符串处理是 bash 的弱项。这应该也属于 shell 的基础设施的

正则匹配的话,还是有个 [[ $s =~ regex ]] 可用的


> 一堆不同语言的转义,考虑的太多

🔁再次重复:

bash 的 'pattern' 足够好了,连 \ 都是本身的意思:'\'

最多只需考虑 ' ( elvish 也需写成 'str1''str2')


> glob 和正则共用不少符号但语义又不一样,增加心智负担。elvish 的 glob 简单很多

🔁再次重复:

elvish 的 glob 也用了 ? * ** {} ?[],❓语义不是也和正则不同吗?

❓elvish 的 glob 也比 bash 的复杂呀:

bash:*.[ch]、[a-z].go

elvish:*.?[set:ch]、?[range:a-z].go


> bash 几乎总是需要 quoting ,如果处理含空格字符串的话,空格有时候作为分隔符,有时候又不是,还有 IFS ,处理起来难写难用且易错。

需要作为一个参数:"$s"

需要 word splitting:$s

❓足以应付大多数场景了吧?或者你举些例子?


> bash 的 数组和 map ……不能表达结构化数据

✔️确实,但对于日常交互式使用而言,一般也足够了。再复杂,也适合上脚本了


> 默认按换行符 split 。如果不希望这种转换可以用 slurp

🤔还行

bash 作为一个参数:"$s"、"$(...)"

elvish 作为一个参数:$s 、(... | slurp)

❓还是感觉 bash 整体代价较低?

❓elvish 默认是按 \n 切割的。如何像 bash 那样,按 IFS 来切割 (...) 呢?
2022-09-05 17:57:44 +08:00
回复了 RayGZJ 创建的主题 Linux 不限 shell 类型的情况下,用 shell 脚本可以实现哪些骚操作?
这些是很普通的操作吧。。

Shell 就是个胶水语言,能快速整合使用各种命令就好
1 ... 12  13  14  15  16  17  18  19  20  21 ... 27  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1019 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 30ms · UTC 22:10 · PVG 06:10 · LAX 15:10 · JFK 18:10
Developed with CodeLauncher
♥ Do have faith in what you're doing.