在使用源代碼和不使用源代碼運行以下腳本時,我期望得到相同的結果。奇怪的是,當我使用源代碼和沒有源代碼運行時,它給了我不同的結果。
外殼腳本
#!/usr/bin/env bash
flag="$1"
for i in ${flag//=/ }; do
echo "item: $i"
done
使用源代碼執行
$ . ./test.sh -p=test
item: -p test
$ source ./test.sh -p=test
item: -p test
無源執行
./test.sh -p=test
item: -p
item: test
有人可以告訴我使用 source 和不使用 source 運行時有什么不同嗎?我試過了/bin/bash,/bin/sh......,還是同樣的問題。
uj5u.com熱心網友回復:
問題是source在您當前運行的同一個 shell 中運行并將./其打開到子 shell 中。
發生的事情是您IFS在當前 shell中設定.bashrc的值可能不包含空格(類似于$'\n'),該值在運行時不會被繼承,./但在使用時會被繼承source
要修復只需重置IFS回其默認值:
IFS=$' \t\n'
source test.sh -p=test
item: -p
item: test
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/536278.html
標籤:狂欢壳嘘
下一篇:從AD中檢索特定的用戶登錄ID
