【发布时间】:2015-01-28 00:02:59
【问题描述】:
我在当前目录中创建了一个以 .cpp 结尾的所有文件的名称数组,并希望创建相同的数组,并将 .cpp 替换为 .o
cppfield=$(ls *.cpp)
ofield=$(ls *.cpp | awk '{print}' ORS=' ' | sed s/.cpp/.o/g)
但它不起作用,只有第一个参数将 .cpp 与 .o 切换
【问题讨论】:
-
令人惊讶的是我无法复制它。
-
cppfield=$(ls *.cpp)不创建数组而是创建字符串。如果你想要一个数组使用cppfield(*.cpp)。它实际上创建了一个数组并允许您使用带有空格/等的文件名。安全。 -
@EtanReisner 在使用
cppfield=($(ls -1 *.cpp))时,我会将IFS 更改为IFS=$'\n'。我在你的 sn-p >cppfield(*.cpp)中缺少什么以避免单独处理带有空格的文件? -
与
IFS混淆只是问题的一部分。我不确定我是否理解第二个问题。 -
“让您安全地使用带有空格/等的文件名”让我担心。我认为创建数组时文件名中的默认 IFS 和空格存在问题。你的 sn-p 真的能处理吗?如果是这样,为什么?希望我的问题现在更清楚了。