我在使用分号和/或大括号的组合时遇到了麻烦。我想在命令行上将其作为一行代码完成:
while [ 1 ]
do
foo
sleep 2
done
我在使用分号和/或大括号的组合时遇到了麻烦。我想在命令行上将其作为一行代码完成:
while [ 1 ]
do
foo
sleep 2
done
甚至不需要使用 do
和 done
。对于无限循环,我发现使用带有大括号的 for
更易读。例如:
for ((;;)) { date ; sleep 1 ; }
for f in *; do if [ "${f#*.}" == 'jpg' ]; then echo $f; fi; done
这将删除它们:
for f in *; do if [ "${f#*.}" == 'jpg' ]; then rm -r $f; fi; done
只是想做出一点贡献。
ls -1 *.jpg
和 rm *.jpg
即可。 - Kevin Feganwhile [[ 0 -ne 1 ]]; do echo "it's looping"; sleep 2; done
nohup bash -c "while true; do aws s3 sync xml s3://bucket-name/xml --profile=s3-profile-name; sleep 3600; done &"
:
来反转:
的角色。while ( gdate +"%c ( %s.%-N )" && sleep 0.71 ) do :; done # discards side-effects
while { gdate +"%c ( %s.%-N )" && sleep 0.71; } do :; done # no sub-shell needed
+ gdate '+%c ( %s.%-N )'
Sun Apr 30 12:38:25 2023 ( 1682872705.498728 )
+ sleep 0.71
+ :
+ gdate '+%c ( %s.%-N )'
Sun Apr 30 12:38:26 2023 ( 1682872706.218152 )
+ sleep 0.71
...
与此同时,zsh
更加宽容,即使没有 :
,也愿意循环执行。
while; do gdate +'%c ( %s.%-N )' && sleep 0.31 ; done
Sun Apr 30 12:46:09 2023 ( 1682873169.469092 )
Sun Apr 30 12:46:09 2023 ( 1682873169.789560 )
Sun Apr 30 12:46:10 2023 ( 1682873170.105635 )
Sun Apr 30 12:46:10 2023 ( 1682873170.424766 )