【问题标题】:shell script to loop through wildcard matched directories循环通配符匹配目录的 shell 脚本
【发布时间】:2013-04-03 23:56:18
【问题描述】:

我正在尝试遍历与通配符匹配的目录。这在命令行中工作正常。但不适用于 Shell 脚本。有什么想法吗?

   for dirs in /var/www/html/my.domain.com/v*; do echo $dirs; done;

以上命令列表

  /var/www/html/my.domain.com/v1.0
  /var/www/html/my.domain.com/v1.2
  /var/www/html/my.domain.com/v2.0

这里是 Shell 脚本版本。它不工作:

 dirs=/var/www/html/my.domain.com/v*
 for dir in $dirs
 do
   echo "$dir"
 done

也试过了:

dirs=`/var/www/html/my.domain.com/v*` #back quotes
for dir in $dirs
do
   echo "$dir"
done

【问题讨论】:

  • 这个例子对我有用——没有任何引用。您之前在此脚本中是否使用过shopt?
  • 进一步注意,使用反引号引用将启动一个子shell并返回其输出。因此,在反引号中,只有命令才有意义
  • @hek2mgl 不,只是一些其他代码。但无处使用shopt
  • 是你的shell脚本#!/bin/bash或#!/bin/sh的第一行?
  • 感谢您的信息。也试过不带引号。但没有运气。

标签: linux shell loops for-loop directory


【解决方案1】:

Glob patterns 和 /var/www/html/my.domain.com/v* 一样是 bash 功能。当您使用 sh script.sh 启动脚本时,似乎 bash 不是您系统上的默认 shell。

确保使用 bash 启动脚本:

bash script.sh

如果您打算直接使用chmod +x script.sh 使脚本可执行,请确保您没有错过在第一行使用以下shebang:

#!/bin/bash

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    相关资源
    最近更新 更多