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

时间:2017-01-19 15:23:59

标签: arrays linux sed terminal filenames

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

这就是我的尝试:

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

我收到错误

  

zsh:许可被拒绝:1butene.com

1butene.com是我的文件。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您当前正在存储一组名称,然后管道到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