bash脚本在评论线后无法执行



为什么我无法使用此# -comment完成bash脚本?我的脚本没有执行通过评论的行。这与在上线中使用强烈闪烁有关吗?

"$PSQL_HOME"/psql -h $HOST_NM     
                      -p $PORT    
                      -U postgres 
                      -v v1=$1    
                      -v v2=$_load 
#                     -f Test.sql
                      -f Test2.sql

您不能做到这一点。将当前行连接到下一条线,所以Bash看到的是:

"$PSQL_HOME"/psql ... -v v1=$1 -v v2=$_load # -f Test.sql
                      -f Test2.sql

在这种特殊情况下,您可以将评论移至最后一行:

"$PSQL_HOME"/psql -h $HOST_NM     
                      -p $PORT    
                      -U postgres 
                      -v v1=$1    
                      -v v2=$_load 
                      -f Test2.sql
#                     -f Test.sql

从技术上讲,脚本的前六行是外壳的一行。评论停止对当前行的解释直到其结束,因此在#评论后无法恢复行。

是否要由于某种原因保留选项顺序,您可以使用该语法:

"$PSQL_HOME"/psql -h $HOST_NM     
                      -p $PORT    
                      -U postgres 
                      -v v1=$1    
                      -v v2=$_load 
                      $(: -f Test.sql) 
                      -f Test2.sql

$( ... )通过执行括号内的内容来代替命令的一部分。:是一个null命令,与#有点相似,但与之不同,它不会结束当前行,因此外部命令行可以在其之后恢复。

将选项代替将选项存储在数组中。评论数组的任意元素要比处理当前的方式更容易。

psql_options=(
     -h "$HOST_NM"
     -p $PORT
     -U postgres
     -v v1="$1"
     -v v2="$_load"
     # -f Test.sql
     -f Test2.sql
)
"$PSQL_HOME"/psql "${psql_options[@]}"

在这种情况下,后斜线逃脱了新线。当是最后一个字符时,Shell将不断从下一行读取以完成命令的读数。

/home/atul/myBash> cat -vte tst.sh 
echo one$
two$
#three$
four$
/home/atul/myBash> chmod +x tst.sh
/home/atul/myBash> ./tst.sh
onetwo#threefour
/home/atul/myBash> 

按照 man bash
评论
...一个单词以#原因开始该单词和
该行上的所有剩余字符将被忽略。

轻微修改tst.sh文件

/home/atul/myBash> cat -vte tst.sh
echo one$
two $
# three$
four$
/home/atul/myBash> ./tst.sh
onetwo
./tst.sh: line 4: four: command not found
/home/atul/myBash>

请注意两个之后的空间 - 它使#启动Word 。该行被解释为评论。单词四个被视为另一个命令的开始。

相关内容

  • 没有找到相关文章

最新更新