我是macOS和Unix领域的新手,但我必须使用它。 我的问题是:我是否可以给sed-command一个包含路径的数组,以便sed使用包含的变量作为路径? 我尝试操纵在此之前确定的User基座。 到目前为止,我的代码是:
#!/bin/bash
...
...
for change in '${plistToModify[@]}'
do
sed 's<_CFURLSTRING>file:///Applications/name_old.app</_CFURLSTRING>#<_CFURLSTRING>file:///Applications/name_new.app</_CFURLSTRING>#' '${plistToModify[$change]}'
done
killall Dock
(我切换了应用的名称,仅供参考)
我尝试在for循环的开头和sed的结尾处对数组进行双引号,但是没有任何作用
该数组包含未知数量的路径,如下所示:
/Users/theUser/Library/Preferences/com.apple.dock.plist
首先有可能这样吗?还是我错过了什么? 预先感谢。
答案 0 :(得分:0)
引号类型错误。单引号内不会发生参数扩展。您必须写"${plistToModify[$change]}"
。
答案 1 :(得分:0)
是的,sed
可以处理多个文件,无论它们是否来自数组都没关系。
在您的特定示例中,您可以编写
sed 'yourSedCommand' "${plistToModify[@]}"
sed 'cmd' file1 file2 file3
与a=(file1 file2 file3); sed 'cmd' "${a[@]}"
相同。 Bash甚至在"${a[@]}"
运行之前就展开了sed
。 sed
无法分辨出差异。
sed
本身将像处理一个大文件一样处理多个文件,因此sed 'cmd' file1 file2 file3
与cat file1 file2 file3 | sed 'cmd'
相同。
仅在使用-i
标志编辑文件的情况下,sed -i
将单独处理多个文件。