2

シェルスクリプトでコマンドを変数に割り当てた後、コマンドを実行するにはどうすればよいですか?例:command_name = echo

さて、「echohelloworld」の代わりに「$command_namehelloworld」を使用する方法はありますか?

4

5 に答える 5

3

はい。その正確なコード($command_name hello world)は機能します。

引用符が存在する場合は、コマンド名と個々の引数の前後にのみ引用符を付けるようにしてください。文字列全体を引用符で囲むと、文字列全体がコマンド名として解釈されますが、これは目的の名前ではありません。

例えば:

command_name="echo"
$command_name hello world

次のように解釈されます:

echo hello world

(これは機能します)、一方:

command_name="echo"
"$command_name hello world"

次のように解釈されます:

"echo hello world"

echo hello worldhelloとworldを引数として解釈するのではなく、呼び出されたコマンドを見つけようとしているため、これは機能しません。

同様に、

command_name="echo hello world"
"$command_name"

同じ理由で失敗しますが、次のようになります。

command_name="echo hello world"
$command_name

動作します。

于 2012-11-21T19:32:18.567 に答える
1

command_name ='echo'

$ command_name "Hello World"

于 2012-11-21T19:32:57.367 に答える
0
#!/bin/bash
var="command"
"$var"

スクリプトファイルで私のために働いた

于 2012-11-21T19:31:51.140 に答える
0

これに使用できますeval

input_file次のようなものがあるとします。

a        b             c  d e f   g

今あなたのターミナルで試してみてください:

# this sed command coalesces white spaces
text='sed "s/ \+/ /g" input_file'

echo $text
sed "s/ \+/ /g" input_file

eval $text
a b c d e f g
于 2012-11-21T19:39:06.080 に答える
0

配列の場合(bash引数がある場合のベストプラクティスです):

commandline=( "echo" "Hello world" )
"${commandline[@]}"
于 2012-11-21T21:45:08.320 に答える