在 ruby 中格式化字符串

Format string in ruby

我有一个字符串和一个变量,我想在这个字符串中使用这个变量,所以它会在将它转换为字符串之前获取该值:

current_process_id = 222
ruby_command = %q(ps -x | awk '{if(~"ruby" && != %d ){printf("Killing ruby process: %s \n",);}};')
puts ruby_command

我试过了:

current_process_id = 222
ruby_command = %q(ps -x | awk '{if(~"ruby" && != %d ){printf("Killing ruby process: %s \n",);}};') % [current_process_id]
puts ruby_command

但是这是错误的:

main.rb:2:in `%': too few arguments (ArgumentError)

我试过了:

awk_check = %q(ps -x | awk '{if) + "(" + %q(~"ruby" && !=)
print_and_kill = %q({printf("Killing ruby process: %s \n",);{system("kill -9 ")};}};')
ruby_process_command = awk_check  + current_process_id.to_s + ")" + print_and_kill
puts ruby_process_command

这对我来说很好用。但是我做的方式不干净

我正在寻找更简洁的方法。

在您的 ruby_command 变量中,您声明了两个位置参数(%d% s),而你只传递一个值 [current_process_id]。您还需要为 %s.

传递第二个值

将您的代码更改为:

current_process_id = 222
ruby_command = %q(ps -x | awk '{if(~"ruby" && != %d ){printf("Killing ruby process: %s \n",);}};') % [current_process_id,current_process_id.to_s] 
puts ruby_command

输出:

ruby_command                                                                                                                                                                        
=> "ps -x | awk '{if(~\"ruby\" && != 222 ){printf(\"Killing ruby process: 222 \n\",);}};'"

如果不想显示数值,只想显示"%s",可以直接用%%转义:

ruby_command = %Q(ps -x | awk '{if(~"ruby" && != %d ){printf("Killing ruby process: %%s \n",);}};') % [current_process_id]

输出:

ruby_command                                                                                                                                                                        
=> "ps -x | awk '{if(~\"ruby\" && != 222 ){printf(\"Killing ruby process: %s \n\",);}};'"