用空格进行shell glob扩展

时间:2013-03-27 22:03:51

标签: bash shell glob sh

我想编写一个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*'

2 个答案:

答案 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命令用于从文件名中删除路径前缀。)