我正在使用linux,以下是我正在尝试的脚本。我想在文件夹中获取最新修改的文件:
#!/bin/bash
shopt -s extglob
name=$(echo *(om[1]))
echo $name
我期待文件名而不是*(om[1])
被回应。因此,脚本不会因使用shopt而产生任何错误。
我在命令行上尝试命令,它将文件名作为输出。
% cd other
% echo *(om[1])
mumbai123.txt
为什么echo *(om[1])
正在处理commandline
而不是bash script
。
答案 0 :(得分:2)
您将zsh
glob限定符与扩展模式混淆。在zsh
(您的交互式shell)中,表达式*(om[1])
将o
和m
限定符应用于模式*
。在bash
中,扩展模式*(om[1])
匹配模式om[1]
的零次或多次出现(与文字字符串“om1”匹配)。由于没有匹配该模式的文件,因此将其传递给echo
,并将其输出以作为name
的值进行捕获。