2012-06-13 63 views
2

在我的shell腳本的一個條件,我看到如何找到在選擇,如果外殼

if [[ ! -d directory1 || ! -L directory ]] ; then 

是什麼-d-L選項的意思是在這裏嗎?我在哪裏可以找到有關在if條件下使用的選項的信息?

+2

那些不是'if'語法;他們是'[[''語法。 ''[''與'if'是完全獨立的命令。 –

回答

1

bashhelp命令有內置的幫助。你可以很容易找到的選項,內置使用help一個bash:

$ help [[ 
... 
Expressions are composed of the same primaries used by the `test' builtin 
... 
$ help test 
test: test [expr] 
    Evaluate conditional expression. 
    ... 
    [the answer you want] 
6

你可以做help test這將顯示,多數由[[命令接受的選項。

你也可以做help \[這將顯示額外的信息。將顯示[[[的幫助文本。

另請參閱「CONDITIONAL EXPRESSIONS」部分中的man bash

0

在Bourne shell中,[test被鏈接到相同的可執行文件。因此,您可以在test聯機幫助頁中找到很多測試

此:

if [[ ! -d directory1 || ! -L directory ]] ; then 

是說如果directory1不是一個目錄如果directory是不是鏈接。

我相信正確的語法應爲:

if [[ ! -d $directory1 ] || [ ! -L $directory ]] ; then 

if [[ ! -d $directory1 -o ! -L $directory ]] ; then 

是在你的OP正確行?

+0

OP中的行是正確的;您可能會將bash語法與POSIX語法混淆。 Bash的[[''支持'||'和什麼; POSIX'''不。要在POSIX shell中做同樣的事情,你可以做'if [-d「$ {directory1}」] || ! [-h目錄]; then'。 '-o'語法由POSIX指定,但已過時(它會導致解析含糊不清)。 –