1

我今天下午只写了一个 bash 脚本。这很丑陋。所以我认为这里必须存在更好的实施方式echo $x

for x in $(ls); do 
    cp $x $(echo $x | sed s/\\./_holo_light./) 
    cp $x $(echo $x | sed s/\\./_holo_dark./) 
done
4

4 回答 4

5

改为这样做:

for x in *; do 
    cp "$x" "${x/./_holo_light.}"
    cp "$x" "${x/./_holo_dark.}"
done
于 2013-02-19T09:02:08.383 回答
3

为什么不只是:

ls | sed 's/a/c/g'
于 2013-02-19T08:48:04.767 回答
1

请注意,从 ls 解析输出有一些问题,如果您确定自己没有受到影响,您可以这样做(GNU sed):

ls | 
sed -nr 's/(.*)\.(.*)$/cp "\1.\2" "\1_holo_light.\2"\ncp "\1.\2" "\1_halo_dark.\2"/p' |
sh

其中 sed 生成复制命令,然后将其传递给 shell 以执行。在追加之前查看 sed 的输出| sh

于 2013-02-19T09:28:53.180 回答
0

虽然此处提到的答案是正确且经过优化的,但
对于您的原始问题文本“模拟标准输入”,您可以在此处使用字符串。

echo "$var" | command

可以替换为

command <<< "$var"
于 2013-02-19T12:01:04.907 回答