有更好的方法来模拟标准输入吗?

时间:2013-02-19 08:44:08

标签: linux bash shell sed

我今天下午写了一个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 个答案:

答案 0 :(得分:5)

请改为:

for x in *; do 
    cp "$x" "${x/./_holo_light.}"
    cp "$x" "${x/./_holo_dark.}"
done

答案 1 :(得分:3)

为什么不呢:

ls | sed 's/a/c/g'

答案 2 :(得分:1)

请注意,解析ls的输出有some issues,如果您确定没有受到影响,可以这样做(GNU sed):

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

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

答案 3 :(得分:0)

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

echo "$var" | command

可以替换为

command <<< "$var"