这很奇怪..主要是因为它昨晚有效。我有一个脚本,该脚本在一个表达式中传递,该表达式应该与数组中的文件名匹配。我不允许使用find
(这是作业)。
例如,如果用户传入参数'*.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"* ]]
到目前为止,上述都没有奏效。
答案 0 :(得分:1)
首先将glob声明为变量,然后在测试中使用该变量。所以,声明:
var="$1" then [ $i == $var ]
这样做的原因是在测试之前强制bash扩展通配符。