Bash“;如果;无论发生什么情况,都要执行的条件
我不熟悉bash脚本,虽然我知道这无疑是一个重复的问题,但我不知道如何用词来搜索它Bash“;如果;无论发生什么情况,都要执行的条件,bash,if-statement,Bash,If Statement,我不熟悉bash脚本,虽然我知道这无疑是一个重复的问题,但我不知道如何用词来搜索它 for i in $( ls); do FILETYPE=$( file -b $i ) if [ "$FILETYPE"="Apple binary property list" ]; then echo $FILETYPE else echo "nope" fi done 我希望这只打印 “苹果二进制属性列表” 如果语句成功,则仅打印“否”,
for i in $( ls); do
FILETYPE=$( file -b $i )
if [ "$FILETYPE"="Apple binary property list" ]; then
echo $FILETYPE
else
echo "nope"
fi
done
我希望这只打印“苹果二进制属性列表”
如果语句成功,则仅打印“否”,否则 所发生的事情是,无论语句是否成功,它都在打印文件类型,并且从不打印“否” 我知道这很简单,但有人能告诉我为什么它会打印除“苹果二进制属性列表”和“否”之外的任何内容吗,
我能做些什么来修复它呢?问题是方括号
[
是一个命令,它是该命令的别名,并且作为所有命令,它希望其参数用空格分隔
写的时候(没有空格)
这是命令的单个参数,它将该单个参数用作非空字符串,该字符串将始终为true
添加空格时,如
"$FILETYPE" = "Apple binary property list"
该命令有三个参数,将正确地将其解析为字符串、操作和另一个字符串。问题在于方括号
[
是一个命令,它是该命令的别名,并且作为所有命令,它希望其参数用空格分隔
写的时候(没有空格)
这是命令的单个参数,它将该单个参数用作非空字符串,该字符串将始终为true
添加空格时,如
"$FILETYPE" = "Apple binary property list"
该命令有三个参数,将正确地将其解析为字符串、操作和另一个字符串。不要使用此参数:
for i in $( ls); do
因为当文件名包含空格或字符(如*
)时,它将中断。请使用以下方法:
for i in *; do
*
扩展到目录中所有文件的列表
出于相关原因,不要忘记引用shell变量:
FILETYPE=$( file -b "$i" )
这将整个变量作为一个参数传递,这就是您想要的
[
是一个接受参数列表的命令,用空格分隔:
if [ "$FILETYPE" = "Apple binary property list" ]; then
如果没有空格,[
只会看到两个参数,“$FILETYPE”=“Apple binary property list”
和]
同样,在变量周围使用引号:
echo "$FILETYPE"
不要使用此选项:
for i in $( ls); do
因为当文件名包含空格或字符(如*
)时,它将中断。请使用以下方法:
for i in *; do
*
扩展到目录中所有文件的列表
出于相关原因,不要忘记引用shell变量:
FILETYPE=$( file -b "$i" )
这将整个变量作为一个参数传递,这就是您想要的
[
是一个接受参数列表的命令,用空格分隔:
if [ "$FILETYPE" = "Apple binary property list" ]; then
如果没有空格,[
只会看到两个参数,“$FILETYPE”=“Apple binary property list”
和]
同样,在变量周围使用引号:
echo "$FILETYPE"
请尝试在条件中的字符串之间添加一些空格,例如,
“$FILETYPE”=“…”
使用shellcheck.net查找脚本中的明显错误我的问题是为什么它会在if中做什么,如果该语句不正确…如果它只打印“nope”,我会理解但这对我来说毫无意义,如果条件失败,它为什么会回显$filetype。Nubhava,你是冠军。这太棒了。Joachim,你是对的,如果你加上它作为答案,我会给你一个复选标记:-)试着在条件中的字符串之间添加一些空格,比如“$filetype”=“…”
使用shellcheck.net查找脚本中的明显错误我的问题是,如果该语句不正确,它为什么要执行if中的操作…如果它只打印“no”,我会理解但这对我来说毫无意义,如果条件失败,它为什么会回显$filetype。Nubhava,你是冠军。这太棒了。Joachim,你是对的,如果你加上它作为答案,我会给你一个复选标记:-)“[是一个命令,它包含一个参数列表,用空格分隔”=头脑发热”[是一个接受参数列表的命令,用空格分隔“=头脑发热