我正在編寫一個腳本,我需要在幾個地方使用文件測試的輸出,包括一個shell函數。我想將文件存在分配給shell變量,如下所示:file_exists=[ -f $myfile ]
。將'test'的結果賦值給一個變量
只是爲了確保我有我的基地覆蓋,我開始通過觸摸一個文件,並測試它的存在:
file='a'
touch $file
if [ -f $file ]
then
echo "1 -- '$file' exists"
fi
輸出:
1 -- 'a' exists
該文件已成功創建 - 沒有意外,但至少我知道我沒有處理任何權限問題或任何問題。
接下來我測試,以確保我可以存儲在變量布爾表達式:
mytest=/bin/true
if $mytest
then
echo "2 -- \$mytest is true"
fi
輸出:
2 -- $mytest is true
所以我已經得到了基本覆蓋 - 條件表達式應該發出與/bin/true
或/bin/false
相同的輸出...但這不是我所看到的:
mytest=[ -f $file ]
if $mytest
then
echo "3 -- \$mytest is true [expect true]"
else
echo "3 -- \$mytest is false [expect true]"
fi
這種失敗,出現以下錯誤:
-f: command not found
我得到同樣的錯誤消息,如果我使用test -f $file
而非[ -f $file ]
。
如果我在[
前面加一個空格,該錯誤消失......
mytest= [ -f $file ]
if $mytest
then
echo "4 -- \$mytest is true [expect true]"
else
echo "4 -- \$mytest is false [expect true]"
fi
輸出似乎是正確的:
4 -- $mytest is true [expect true]
...但如果我刪除該文件,我應該得到相反的結果:
rm $file
mytest= [ -f $file ]
if $mytest
then
echo "5 -- \$mytest is true [expect false]"
else
echo "5 -- \$mytest is false [expect false]"
fi
...我不要:
5 -- $mytest is true [expect false]
爲了公平起見,我期望與真值的空間亂:
mytest= /bin/false
if $mytest
then
echo "6 -- \$mytest is true [expect false]"
else
echo "6 -- \$mytest is false [expect false]"
fi
輸出:
6 -- $mytest is true [expect false]
那麼,我該如何存儲在內置的test
輸出一個shell變量?
'mytest的=/bin中/ TRUE'這是存儲** **串'/斌/真''mytest'變量中。 –