2014-07-02 152 views
0

我想知道爲什麼變量($HOST$i)沒有傳遞給timeout 1 bash -c 'cat </dev/null> /dev/tcp/$HOST/$i' && echo $?命令。不傳遞給命令的變量

#!/bin/bash 

HOST=$1 

for i in {0..8889} 
do 
    OPENPORT=$(timeout 1 bash -c 'cat </dev/null> /dev/tcp/$HOST/$i' && echo $?) 
    if [ "$OPENPORT" == 0 ] 
    then 
     echo -e "Port $i is open on $HOST.\n" 
    fi 
done 
+1

另一個說明:'some_command && echo $?'沒有任何意義:只有當'some_command'成功時纔會執行'echo $?',因此總是會回顯'0' :) – anishsane

+0

謝謝爲小費。 – Switchkick

回答

2

它是因爲你的變量用單引號(')。改爲使用雙引號(")。

從在單引號('gnu.org

圍字符保留了引號內的每個字符的字面 值。單引號之間可能不會出現單引號,即使前面加了反斜槓也是如此。