问题描述
for f in $folder-*-something; do
echo $f
done
通常很好,但我只想glob for numbers,所以我不想匹配$folder-1-2-something
完全按预期工作的东西是
#!/usr/bin/env bash
shopt -s extglob
if [ $1 -eq 0 ]; then
for f in $folder-+([[:digit:]])-something; do
echo $f
done
fi
extglob
不能仅在 if
-block 中打开 - 它返回 Syntax error near unexpected token `('
(我在某处阅读了一个简短的摘要为什么,但我再也找不到了) .如果那行得通,我可以在完成相关行后reset it。
问题:我正在扩展的脚本是一个大型开源项目的一部分,我不想在整个 500 行以上的脚本中打开选项,因为这可能会干扰其他代码。
我现在倾向于使用的选项是使用 *
-globbing 并跳过不相关的条目。
- 有没有更好的方法来做到这一点?
- 在哪里可以找到有关
shopt
及其怪癖的深入信息?我发现很多网站都在讨论所有选项,但我什至找不到两行说明为什么将其直接放在 shebang 之后。
解决方法
一种解决方法是将与扩展模式匹配的文件名存储到一个数组中,然后取消设置 <?php
$depDate = $_REQUEST["depDate"];
echo $depDate;
?>
。之后,必须使用数组,而不是扩展模式:
extglob
或者,如果您想恢复状态:
shopt -s extglob
files=("$folder"-+([[:digit:]])-something)
shopt -u extglob
if [ "$1" -eq 0 ]; then
for f in "${files[@]}"; do
echo "$f"
done
fi
,
使用 find
代替通配符:
find . -regex "./$folder-[0-9]+-something" |
while IFS= read -r f; do
echo "$f"
done