为什么包含的代码在bash中不起作用?

为什么包含的代码在bash中不起作用?,bash,unix,Bash,Unix,这不起作用,但会引发错误: DOWNLOAD_PATH="sample.ext" RATE_LIMIT="300K" mkdir ../$DOWNLOAD_PATH BASE_COMMAND="screen wget --continue --directory-prefix=../$DOWNLOAD_PATH --tries=2 --input-file=$DOWNLOAD_PATH" $("${BASE_COMMAND} --limit-rate=${RATE_LIMIT}") 然而,如果

这不起作用,但会引发错误:

DOWNLOAD_PATH="sample.ext"
RATE_LIMIT="300K"
mkdir ../$DOWNLOAD_PATH
BASE_COMMAND="screen wget --continue --directory-prefix=../$DOWNLOAD_PATH --tries=2 --input-file=$DOWNLOAD_PATH"
$("${BASE_COMMAND} --limit-rate=${RATE_LIMIT}")
然而,如果我这样做

line 5: screen wget --continue --directory-prefix=../sample.ext --tries=2 --input-file=sample.ext --limit-rate=300K: No such file or directory
一切都很好。。。
为什么?

因为当您将
“${BASE\u COMMAND}--limit rate=${rate\u limit}”
放在引号中时,bash将其解释为单个单词,并尝试查找具有该名称的命令。它正在寻找一个真正有这个名字的程序

DOWNLOAD_PATH="sample.ext"
RATE_LIMIT="300K"
mkdir ../$DOWNLOAD_PATH
BASE_COMMAND="screen wget --continue --directory-prefix=../$DOWNLOAD_PATH --tries=2 --input-file=$DOWNLOAD_PATH"
COMPLETE_COMMAND="${BASE_COMMAND} --limit-rate=${RATE_LIMIT}"
$($COMPLETE_COMMAND)
空间和所有。显然这是不存在的。解决方案是不加引号,这样bash将把它解释为一个空格分隔的单词列表,并理解命令本身就是
屏幕

顺便说一下,也不需要使用
$()
,除非您试图捕获命令的输出。这很好:

screen wget --continue --directory-prefix=../sample.ext --tries=2 --input-file=sample.ext --limit-rate=300K

因为当您将
“${BASE\u COMMAND}--limit rate=${rate\u limit}”
放在引号中时,bash将其解释为单个单词,并尝试查找具有该名称的命令。它正在寻找一个真正有这个名字的程序

DOWNLOAD_PATH="sample.ext"
RATE_LIMIT="300K"
mkdir ../$DOWNLOAD_PATH
BASE_COMMAND="screen wget --continue --directory-prefix=../$DOWNLOAD_PATH --tries=2 --input-file=$DOWNLOAD_PATH"
COMPLETE_COMMAND="${BASE_COMMAND} --limit-rate=${RATE_LIMIT}"
$($COMPLETE_COMMAND)
空间和所有。显然这是不存在的。解决方案是不加引号,这样bash将把它解释为一个空格分隔的单词列表,并理解命令本身就是
屏幕

顺便说一下,也不需要使用
$()
,除非您试图捕获命令的输出。这很好:

screen wget --continue --directory-prefix=../sample.ext --tries=2 --input-file=sample.ext --limit-rate=300K

谢谢这就解决了问题。我真的应该学习更多关于bash脚本的知识,这样我就不会重复像这样愚蠢的错误了……谢谢!这就解决了问题。我真的应该学习更多关于bash脚本的知识,这样我就不会重复像这样愚蠢的错误了……为什么要把这些都放在一个变量中呢?请看。我在脚本中的多个位置使用该命令,希望能够集中更改它…为什么要将所有这些都放在一个变量中?请参阅。我正在脚本中的多个位置使用该命令,希望能够集中更改它。。。