【问题标题】:.sh script will not let me loop through files.sh 脚本不会让我遍历文件
【发布时间】:2014-08-12 00:48:57
【问题描述】:

我正在尝试在 /var/www/ 上打印我的文件,但由于某种原因,我收到此错误: “temp.sh:第 3 行:文件:找不到命令”

代码:

#loop through files FILES = /var/www/* for f in $FILES do echo "processing $f" done

我通过命令行从主目录运行它,例如 sh script.sh(如果重要的话)

【问题讨论】:

    标签: bash ssh debian


    【解决方案1】:

    要在 sh 中设置变量,= 字符前后不能有空格。将您的代码更改为

    FILES=/var/www/*
    

    但是,如果/var/www 中的任何文件的名称中有空格,则会出现问题,因为它们将在您的for 行中的变量替换后被拆分。所以如果有像name with space 这样的文件,你会得到

    processing /var/www/name
    processing with
    processing space
    

    您可以通过将模式直接放在for命令中来避免这种情况,因为路径名扩展发生在分词之后

    for f in /var/www/*; do
        echo "processing $f"
    done
    

    你会得到processing /var/www/name with space

    或者,您可以为目录使用一个变量——您只需要确保通配符位于for 行中即可以正确的顺序进行扩展/拆分:

    FILE_DIR=/var/www
    for f in $FILE_DIR/*; do
    

    【讨论】:

    • 宾果万果!解决了。​​
    • +1:或者,同样,FILES=(/var/www/*); for file in "${FILES[@]}"; do …whatever…; done,使用数组来存储名称。
    • @JonathanLeffler:这可行,但仅适用于 bash —— 其他 sh 实现不支持数组。
    • 嗯,其他一些 shell 支持数组......但不是全部。 Korn shell 确实如此。该问题被标记为bash,因此使用bash 功能并非不合理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多