1

以下代码打印 /home/user/dir/* @(${host}|${hostname}) * 而不是打印目录中的每个文件。

#!/usr/bin/ksh

host=foo
hostname=bar 
config_path="/home/user/dir"

search=$config_path/*_@(${host}|${hostname})_*

for file in $search
do                    
  echo $file
done

如果我这样做,它会起作用

#!/usr/bin/ksh

host=foo
hostname=bar 
config_path="/home/user/dir"

#search=$config_path/*_@(${host}|${hostname})_*

for file in $config_path/*_@(${host}|${hostname})_*
do                    
  echo $file
done

我有三个问题。

1)为什么当模式分配给变量时它返回字符串?

2)我在很多地方都在使用这种模式,所以最好给它分配一个变量。如何解决这个问题?

3) 在较新版本的 ksh 中是否已修复?

我正在使用 SunOS 服务器 5.10 Generic_147441-23 i86pc i386 i86pc 并通过键入以下命令获取 ksh 版本。

$ set -o vi
$ Version M-11/16/88i
4

1 回答 1

3

要解决此问题,您可以执行以下操作:

for file in $(eval echo $search)
于 2013-01-10T11:51:25.757 回答