Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash .sh脚本不允许我循环浏览文件_Bash_Ssh_Debian - Fatal编程技术网

Bash .sh脚本不允许我循环浏览文件

Bash .sh脚本不允许我循环浏览文件,bash,ssh,debian,Bash,Ssh,Debian,我正试图在/var/www/上打印我的文件,但由于某些原因,我出现以下错误: “temp.sh:第3行:文件:未找到命令” 代码: #循环浏览文件 FILES=/var/www/* 对于f,在$FILES中 做 echo“处理$f” 完成 我通过命令行从主目录运行此命令,如sh script.sh(如果有关系)要在sh中设置变量,在=字符之前或之后不能有空格。将代码更改为 FILES=/var/www/* 但是,如果/var/www中的任何文件的名称中有空格,则会出现问题,因为它们将在for行

我正试图在/var/www/上打印我的文件,但由于某些原因,我出现以下错误: “temp.sh:第3行:文件:未找到命令”

代码:

#循环浏览文件
FILES=/var/www/*
对于f,在$FILES中
做
echo“处理$f”
完成


我通过命令行从主目录运行此命令,如sh script.sh(如果有关系)

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

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

processing /var/www/name
processing with
processing space
您可以通过将模式直接放入
for
命令中来避免这种情况,因为路径名扩展发生在单词拆分之后:

for f in /var/www/*; do
    echo "processing $f"
done
您将获得
processing/var/www/name和空格

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

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

宾果班戈!这就解决了问题。+1:或者,再一次,
FILES=(/var/www/*);对于“${FILES[@]}”中的文件;做…任何事…;完成
,使用数组存储名称。@JonathanLeffler:这是可行的,但仅适用于bash——其他sh实现不支持数组。好吧,其他一些shell支持数组……但不是全部。Korn shell就是其中之一。问题被标记为
bash
,因此使用
bash
功能并非不合理。