zsh中单括号中的字符串比较

21 bash zsh test

用于打印所有文件夹的 Bash 代码:

for f in ~/*;
do
if [ $f  == '/home/sk/.' -o $f  == '/home/sk/..' ]; then
       true
  else
     echo "$f"
  fi
done
Run Code Online (Sandbox Code Playgroud)

它适用于 bash。当我在 z shell 上运行代码时,它抛出了错误:

 = not found
Run Code Online (Sandbox Code Playgroud)

然后我转换[[[, ]into]]以避免在 z shell 中出现此错误并在 z shell 上运行它。它抛出了下一个错误:

condition expected: $f
Run Code Online (Sandbox Code Playgroud)

使用[[and ]],bash 也会抛出错误:

syntax error in conditional expression
syntax error near `-o'
Run Code Online (Sandbox Code Playgroud)

是否有一个 POSIX 标准可以在 shell 中进行字符串比较,它可以跨 shell 工作?

ter*_*don 27

这里有各种各样的问题。首先,==不是标准的,POSIX 方式是=. 对于-o. 这将适用于 bash 和 zsh:

for f in ~/*;
do
if [ "$f"  = '/home/sk/.' ] || [ "$f"  = '/home/sk/..' ]; then
       true
  else
     echo "$f"
  fi
done
Run Code Online (Sandbox Code Playgroud)

请注意,您if不需要,默认情况下在 bash 和 zsh 中都会忽略点文件。你可以简单地写:

for f in ~/*; do echo "$f"; done
Run Code Online (Sandbox Code Playgroud)

甚至

printf "%s\n" ~/*
Run Code Online (Sandbox Code Playgroud)