如何在 bash 中以字符串形式执行 for 循环

如何在 bash 中以字符串形式执行 for 循环

我需要将循环作为字符串执行。这:

bash -c "for l in $(/bin/ls /dir1); do /bin/ln -sf $l /dir2/; done"

给出错误:

/bin/bash: -c: line 1: syntax error near unexpected token `file1'
/bin/bash: -c: line 1: `file1'

file1 是我想在第一个目录中转换为符号链接的文件之一。

答案1

不解析 ls 输出:http://mywiki.wooledge.org/ParsingLs

另外,在此示例中,您不需要循环,只需让ln循环遍历 args 即可。 cd到要在其中创建符号链接的目录,如果您希望相对符号链接目标在使用当前目录中的相对路径生成它们时起作用。

(cd /dir1 && ln -sf -- * /dir2)      # make broken symlinks in dir2
(cd /dir2 && ln -sf -- ../dir1/* .)  # make relative symlinks
ln -sf /dir1/* /dir2/                # make absolute symlinks

(subshell)以避免更改当前 shell 中的目录。

您还可以使用ln -sf -t /dir2 -- *,这与 很有用find -exec ln -t /dir {} +,因为find -exec {} +只能将列表放在命令行末尾。

GNUcp还具有创建硬/符号链接的选项-l-s

相关内容