[英]String matching not working in bash script
这很奇怪..主要是因为它昨晚有效。 我有一个在表达式中传递的脚本,该表达式应该与数组中的文件名匹配。 但是我不允许使用find
(这是一项任务)。
例如,如果用户传入参数'*.c'
,而我有以下文件'*.c'
来检查:
~/dir/text1.txt
~/dir/no.c
~/dir/no.sh
我在这样的函数中进行比较:
process ()
{
local new_cur=()
for i in "${files[@]}"; do
if [[ "$i" == "$1" ]]; then
new_cur+=("$i")
fi
done
}
然后,我在bash脚本中这样称呼它,其中arguments[1]
= = '*.c'
:
process "${arguments[1]}"
在我的process
函数内部,我检查了字符串*.c
并传入了文件,并且传入了文件。但是,它没有在函数中传递if
语句。
请注意,即使没有通配符的简单字符串也无法使用。
编辑:我也查找了常见的解决方案,无论出于何种原因都没有用。 这是我尝试过的:
if [ "$i" == "$1" ]
if [ "$1" == "$i" ]
if [ "$i" = "$1" ]
if [ "$1" = "$i" ]
if [[ "$1" = "$i" ]]
if [[ "$i" = "$1" ]]
if [[ "$1" == "$i" ]]
if [[ "$i" == *"$1"* ]]
到目前为止,以上方法均无效。
首先将glob声明为变量,然后在测试中使用该变量。 因此,声明:
var="$1" then [ $i == $var ]
这样做的原因是在测试之前强制bash扩展通配符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.