Scr*_*tty 5 bash command-substitution test variable
这给了我一个错误,说参数太多:
if [ $( file -b $i ) == "directory" ]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试这个时
name=$( file -b $i )
if [ name == "directory" ]
Run Code Online (Sandbox Code Playgroud)
它似乎工作得很好。
有人可以解释这一点或在文档中指出解释吗?
几个问题:
]
表示[
( test
)的参数结束,并且必须是最后一个参数;你有几个]
s,这是错误的;大概你打算使用:
if [ $( file -b $i ) == "directory" ]
Run Code Online (Sandbox Code Playgroud)如果您使用了上述内容,您将得到bash: [: too many arguments
,因为将在变量扩展 ( $i
)的输出上进行分词,然后进行命令替换,$()
( file
command) 并且[
会在 之前看到多个单词=
,从而导致错误消息。您需要引用变量扩展和命令替换:
[ "$(file -b "$1")" == "directory" ]
Run Code Online (Sandbox Code Playgroud)作为旁注,您应该使用bash
关键字[[
,而不是[
因为前者会为您处理分词(和路径名扩展)。
归档时间: |
|
查看次数: |
366 次 |
最近记录: |