我今天下午写了一个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
答案 0 :(得分:5)
请改为:
for x in *; do
cp "$x" "${x/./_holo_light.}"
cp "$x" "${x/./_holo_dark.}"
done
ls
。改为使用glob。sed
。 Bash可以执行string manipulation。答案 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"