シェルスクリプトでコマンドを変数に割り当てた後、コマンドを実行するにはどうすればよいですか?例:command_name = echo
さて、「echohelloworld」の代わりに「$command_namehelloworld」を使用する方法はありますか?
はい。その正確なコード($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 world
helloとworldを引数として解釈するのではなく、呼び出されたコマンドを見つけようとしているため、これは機能しません。
同様に、
command_name="echo hello world"
"$command_name"
同じ理由で失敗しますが、次のようになります。
command_name="echo hello world"
$command_name
動作します。
command_name ='echo'
$ command_name "Hello World"
#!/bin/bash
var="command"
"$var"
スクリプトファイルで私のために働いた
これに使用できます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
配列の場合(bash
引数がある場合のベストプラクティスです):
commandline=( "echo" "Hello world" )
"${commandline[@]}"