【发布时间】: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(如果重要的话)
【问题讨论】:
我正在尝试在 /var/www/ 上打印我的文件,但由于某种原因,我收到此错误: “temp.sh:第 3 行:文件:找不到命令”
代码:
#loop through files
FILES = /var/www/*
for f in $FILES
do
echo "processing $f"
done
我通过命令行从主目录运行它,例如 sh script.sh(如果重要的话)
【问题讨论】:
要在 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
【讨论】:
FILES=(/var/www/*); for file in "${FILES[@]}"; do …whatever…; done,使用数组来存储名称。
bash,因此使用bash 功能并非不合理。