什么是[“$ var”]&& $ var做什么?

时间:2018-03-29 15:07:18

标签: shell sh

我正在浏览一个代码库,并在shell脚本中遇到了以下代码:

./some_script.sh 
errcode=$?

if [ "$errcode" != 0 ]; then
  [ "$SCRIPT_PATH" ] && $SCRIPT_PATH do_something
fi

SCRIPT_PATH是一个环境变量,它扩展到脚本的路径(比如/usr/bin/abc.sh)。但是,我不明白if循环中的代码是什么。 [ "$SCRIPT_PATH" ]做了什么?是否有任何使用它或者这只是写错了吗?我唯一能想到的是,在运行它之前应该[ -f "$SCRIPT_PATH" ]检查文件是否存在,但我不确定了。

知道还有什么可以做的吗?

2 个答案:

答案 0 :(得分:2)

如果程序不为空或未设置,则会在SCRIPT_PATH 中运行该程序(因为这是[ one_arg ]测试的作用。)

答案 1 :(得分:0)

它是以下的简写:

(0..4).each do |n|
    let!(:"deal1_step#{n}") {
      FactoryGirl.create(:step,
        order_nb: n,
        message_content: "this is message #{n}",        
       background_asset_filename: "campaigns/assets_for_tests/backgroundimage#{n}.jpg",  
        deal: deal)
    }
  end
before do 
  deal1_step1.video_url = "https://www.facebook.com/rihanna/videos/10155221800656676/"
  deal1_step1.video_x = 500
  deal1_step1.video_y = 500
  # may need to save deal1_step1 depending on exactly what you're looking for

  deal1_step2.update_attributes(video_url: "https://www.facebook.com/rihanna/videos/10155221800656676/", video_x: 500, video_y: 500 )

  ...
end

它通过滥用链式条件和短路的方式来工作。在if [ "$errcode" != 0 ]; then if [ "$SCRIPT_PATH" ]; then $SCRIPT_PATH do_something fi fi 声明中。

这是一个好主意是......值得商榷。