命令在shell脚本中找不到

时间:2015-11-17 17:09:17

标签: linux bash shell

这是我的剧本

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="smyacc@hotmail.com">
    <input type="hidden" name="lc" value="GB">
    <input type="hidden" name="item_name" value="listing-purchase">
    <input type="hidden" name="amount" value="2.99">
    <input type="hidden" name="currency_code" value="GBP">
    <input type="hidden" name="button_subtype" value="services">
    <input type="hidden" name="no_note" value="0">
    <input type="hidden" name="shipping" value="0.00">
    <input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHostedGuest">
    <input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal – The safer, easier way to pay online.">
    <img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1">
</form>

应该很简单,删除包含 R079

的所有文件
#!/bin/bash

for file in *.ats; do
  if [["$file" =~ _R079_]]; then
rm -f $file
  fi
done

问题出在哪里?

1 个答案:

答案 0 :(得分:4)

问题是[[之后和]]之前没有空格,因此您可以使用其中任何一个:

[[ $file =~ _R079_ ]]

或者使用glob:

[[ $file == *_R079_* ]]

但是,如果您只是删除文件,则无需使用循环,可以使用:

rm *_R079_*.ats

请注意,如果存在大量匹配文件,则上述rm命令可能会出错。在这种情况下,请使用find

find . -maxdepth 1 -name '*_R079_*.ats' -delete