字符串中的模式匹配

时间:2013-07-19 15:56:48

标签: bash glob

我正在编写一个包含类似于:

的命令的bash脚本
echo Configure with --with-foo=\"/tmp/foo-*\"

我希望此命令生成输出,例如:

Configure with --with-foo="/tmp/foo-1.3.2"

但是模式没有扩展,因为它嵌入了字符串中。我通过使用命令替换来实现它:

echo Configure with --with-foo=\"$(echo /tmp/foo-*)\"

我认为这是标准/ bin / sh解决方案,但bash支持不需要分支子shell的解决方案,就像$((6 * 7))可以代替{{ 1}?另外,有没有办法将结果限制为单个匹配?

2 个答案:

答案 0 :(得分:1)

作为替代方案,在第一次迭代后使用for循环和break

shopt -s nullglob
for f in /tmp/foo-*; do 
    echo "Configure with --with-foo=\"$f\""
    break
done

答案 1 :(得分:1)

要检查模式扩展到的文件数量,请在使用之前将扩展存储到数组中

shopt -s nullglob
foo=(/tmp/foo-*)
if   (( ${#foo[@]} == 0 )); then echo "no foo files"
elif (( ${#foo[@]}  > 1 )); then echo "too many foo files"
else do something with "${foo[0]}"
fi