Bash

包含空格的eval上的bash錯誤

  • August 21, 2018

我需要使用格式觸發 bash 傳遞參數

$$ variable_name=“value” $$像這樣:

./test.sh ip='164.130.21.98' hostname='whatever' pwd='/test' ftpcmd='CWD debug' user='stefano'

在 test.sh 腳本上,我想為任何變數分配相關值:

#!/bin/bash
eval `echo "$@"`
echo $ftpcmd

但我得到一個prova: command not found錯誤。

我無法理解我的ftpcmd='CWD debug'參數有什麼問題,也無法理解我應該如何編寫它。

如果我嘗試將 eval 替換為 declare ,則$ftpcmd僅設置為,CWD而不是CWD debug我所期望的。

如果你把作業放在腳本之前

ip='164.130.21.98' hostname='whatever' pwd='/test' ftpcmd='CWD debug' user='stefano' ./test.sh 

這些變數在腳本環境中可用。該-k選項將所有分配(不僅僅是命令前分配)視為環境修改。

set -k
./test.sh ip='164.130.21.98' hostname='whatever' pwd='/test' ftpcmd='CWD debug' user='stefano'
set +k

在任何一種情況下,eval都不需要,可以將其刪除。

引用自:https://unix.stackexchange.com/questions/233467