我想编写一个Posix shell脚本函数,该函数将匹配一个需要展开的空格和glob字符(*?)的模式。在Python中, glob.glob('/ tmp / hello world *')将返回正确的列表。我如何在shell中执行此操作?
#!/bin/sh
## this function will list
## all of the files in the /tmp
## directory that match pattern
f() {
PATTERN="$1"
ls -1 "/tmp/$PATTERN"
}
touch '/tmp/hello world {1,2,3}.txt'
f 'hello world*'
答案 0 :(得分:3)
您可以将*
以外的所有内容括在引号中:
ls -l "hello world"*
ls -l "hello world"*".txt"
然后,您可以将带引号的字符串传递给f()
。使用f()
内的字符串需要eval
。
#!/bin/sh
## this function will list
## all of the files in the /tmp
## directory that match pattern
f() {
PATTERN=$1
eval ls -1 "/tmp/$PATTERN"
}
touch '/tmp/hello world {1,2,3}.txt'
f '"hello world"*'
答案 1 :(得分:1)
find
的模式匹配与shell完全相同,但它非常接近,所以你可以利用它:
f() {
find . -mindepth 1 -maxdepth 1 -name "$1" | sed 's#^.*/##'
}
(sed
命令用于从文件名中删除路径前缀。)