gpt4 book ai didi

arrays - 将所有文件名(不带扩展名)写入 Ubuntu 终端中的数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:04 25 4
gpt4 key购买 nike

我想从当前目录中提取所有具有一个特定扩展名 (.com) 且不带扩展名的文件的名称,并将它们存储在一个数组中。

这是我尝试过的:

test=$((*.com) | sed 's/.com//g')

我得到了错误

zsh: permission denied: 1butene.com

1butene.com 是我的文件。

感谢您的帮助!

最佳答案

您当前正在存储一组名称,然后通过管道传输到 sed。当 glob 展开时,这将成为表单上的命令:

1butene.com xxxx | sed 's/.com//g'

这显然是不允许的,因为 1butene.com 本身不是一个命令。


你要做的就是

1) 存储数据,
2) 进行清洁。

为此,我们有好消息!您可以执行 Shell parameter expansion on arrays !

这样你就可以将数据存储在一个数组中:

names=(*.com)

然后用 extracting its name 对它们进行替换,没有扩展名:

printf "%s\n" "${names[@]%.*}"

如果你想change values of bash array elements without loop , 只需使用语法

new_array=("${names[@]%.*}")

示例:

$ touch a{1..3}.{sql,com}
$ com_names=(*com)
$ printf "%s\n" "${com_names[@]}"
a1.com
a2.com
a3.com
$ printf "%s\n" "${com_names[@]%.*}"
a1
a2
a3
b=("${com_names[@]%.*}") # assign to a new array
$ printf "%s\n" "${b[@]}"
a1
a2
a3

关于arrays - 将所有文件名(不带扩展名)写入 Ubuntu 终端中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41745513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com