在BASH中运行变量命令
我有一个名为script.sh的BASH脚本,它接受3个参数并运行一个可执行文件。前两个只是数字,但最后一个是给出输入文件的参数。我希望脚本以输入作为可执行文件的参数运行可执行文件,并使用“如果要存储命令,最好使用函数而不是变量。正如您所发现的,重定向在存储在变量中时不起作用(也不起作用在BASH中运行变量命令,bash,shell,Bash,Shell,我有一个名为script.sh的BASH脚本,它接受3个参数并运行一个可执行文件。前两个只是数字,但最后一个是给出输入文件的参数。我希望脚本以输入作为可执行文件的参数运行可执行文件,并使用“如果要存储命令,最好使用函数而不是变量。正如您所发现的,重定向在存储在变量中时不起作用(也不起作用|,;或&) command1(){ “/l${1}t${2}”“3” } 命令2(){ “/l${1}t${2}”
|
,;
或&
)
command1(){
“/l${1}t${2}”“3”
}
命令2(){
“/l${1}t${2}”<“$3”
}
命令1“$@”
命令2“$@”
在这里,我定义了两个函数,它们使用数组中的参数调用$@
“$@”
将脚本的参数转发给函数
还请注意,我在“/${1}t${2}”和“$3”
周围加了引号。使用双引号允许这些参数包含空格。自由引用是一种很好的防御脚本编写技术
(我强烈建议不要执行eval“$command2”
。使用eval
是一个非常危险的习惯。)如果您想存储命令,最好使用函数而不是变量。正如您所发现的,当存储在变量中时重定向不起作用(也不包括
、
或&
)
command1(){
“/l${1}t${2}”“3”
}
命令2(){
“/l${1}t${2}”<“$3”
}
命令1“$@”
命令2“$@”
在这里,我定义了两个函数,它们使用数组中的参数调用$@
“$@”
将脚本的参数转发给函数
还请注意,我在“/${1}t${2}”和“$3”
周围加了引号。使用双引号允许这些参数包含空格。自由引用是一种很好的防御脚本编写技术
(我强烈建议不要做eval“$command2”
。使用eval
是一个非常危险的习惯。)无论如何,您应该能够eval
变量的内容。无论如何,您应该能够eval
变量的内容。这正是我需要的!感谢您的帮助和精彩的解释!这正是我需要的!感谢您的帮助和精彩的解释!
bash script.sh 5 1 input.txt
#!/bin/bash
command1="./l${1}t${2} $3"
command2="./l${1}t${2} < $3"
echo + ${command1}
${command1}
echo + ${command2}
${command2}
./l5t1 input.txt
./l5t1 < input.txt
./l5t1 '<' input.txt
command1() {
"./l${1}t${2}" "$3"
}
command2() {
"./l${1}t${2}" < "$3"
}
command1 "$@"
command2 "$@"