1
我寫了一個小腳本,出於某種原因,我需要將參數中傳遞的任何空格轉義出來以使其起作用。pgrep打印與預期不同的pid
我閱讀了許多關於這個問題的人的其他文章,它通常是由於沒有引用$ @,但我的所有變量都在腳本中引用,並在命令行中引用了參數。另外,如果我以調試模式運行腳本,返回的行可以通過複製粘貼成功運行,但在腳本內執行時會失敗。
CODE:
connections()
{
args="[email protected]"
pid="$(pgrep -nf "$args")"
echo $pid
# code that shows TCP and UDP connections for $pid
}
connections "[email protected]"
例:
bash test.sh "blah blah"
失敗,而是返回當前運行的外殼
bash test.sh "blah\ blah"
成功的PID和返回的PID proc ess您正在通過pgrep搜索
這完全不是你的問題,但我不太明白你在這裏使用'「$ @」'。 'connections'似乎被設計得很清楚,只有一個參數,如果它接收到多個參數(它將所有這些參數分別傳遞給'pgrep -nf',使得第一個參數與命令匹配行和所有後續參數僅與進程名稱匹配)。那麼爲什麼不使用'「$ 1」'而不是?或者,更好的是,如果有多個參數,會給出某種錯誤或警告? – ruakh 2012-04-03 22:13:53
我已經嘗試過,並有相同的問題。如果我用$ 1替換$ @的所有實例,則會遇到同樣的問題(跳過空間工作,而不是轉義空間拉動當前shell的pid) – 2012-04-03 22:25:11
是的:正如我所說的,您濫用''$ @''不是問題。但我仍然沒有看到*你爲什麼要濫用它。 – ruakh 2012-04-03 23:50:21