C-shell : foreach ls 无法检测 dash/hyphen 的文件名 (-)
C-shell : foreach ls cannot detect file name with dash/hyphen (-)
我有一个 c shell 脚本来过滤条件如下的文件:
*_[+-]*[A-D]*.txt
文件示例:
Reflow_-12_A124er.txt
我的脚本如下:
#!/bin/csh -f
cd /data
foreach file (`ls *_[+-]*[A-D]*.txt`)
echo "file: " $file
gzip $file
end
如果我在数据文件夹中尝试命令 ls *_[+-]*[A-D]*.txt
,则会有 txt 文件的输出。
但是,如果我尝试 运行 该脚本,该脚本不会检测到带有 (-) 的文件,即使它符合过滤器。
为什么?
老实说,我不明白为什么,但这行得通:
foreach file (`ls *_[+--]*[A-D]*.txt`)
还有这个:
foreach file (`ls *_[--+]*[A-D]*.txt`)
您可能会认为我不小心在 ASCII table 上包含了位于 +
和 -
之间的 ,
字符,对吗?没有。脚本没有选择我的示例文件 Reflow_,77D123ab.txt
.
csh 的文档清楚地指出,将短划线放在字符 class 的开头将代表文字短划线(并且某些版本的 csh 接受末尾的短划线),但也许它是与 +
作为量词有关的错误,或者它只需要字符 class 中的 2 个以上字符才能正常工作。
我有一个 c shell 脚本来过滤条件如下的文件:
*_[+-]*[A-D]*.txt
文件示例:
Reflow_-12_A124er.txt
我的脚本如下:
#!/bin/csh -f
cd /data
foreach file (`ls *_[+-]*[A-D]*.txt`)
echo "file: " $file
gzip $file
end
如果我在数据文件夹中尝试命令 ls *_[+-]*[A-D]*.txt
,则会有 txt 文件的输出。
但是,如果我尝试 运行 该脚本,该脚本不会检测到带有 (-) 的文件,即使它符合过滤器。
为什么?
老实说,我不明白为什么,但这行得通:
foreach file (`ls *_[+--]*[A-D]*.txt`)
还有这个:
foreach file (`ls *_[--+]*[A-D]*.txt`)
您可能会认为我不小心在 ASCII table 上包含了位于 +
和 -
之间的 ,
字符,对吗?没有。脚本没有选择我的示例文件 Reflow_,77D123ab.txt
.
csh 的文档清楚地指出,将短划线放在字符 class 的开头将代表文字短划线(并且某些版本的 csh 接受末尾的短划线),但也许它是与 +
作为量词有关的错误,或者它只需要字符 class 中的 2 个以上字符才能正常工作。