insmod 매개변수 및 $ 기호

insmod 매개변수 및 $ 기호

Ubuntu 14.04.1 LTS에서 장치 드라이버 프로그래밍을 하고 있는데 이상한 동작이 발생했습니다.

sudo insmod hello.ko whom="$"예상되는 출력을 생성합니다.

안녕하세요$(0)!!!

그러나 sudo insmod hello.ko whom="$$"다음을 생성합니다.

안녕하세요 3275(0)!!!

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>

MODULE_LICENSE("Dual BSD/GPL");

static char *whom = "world";
static int howMany = 1;

static int __init  hello_init(void){
int i;
for(i = 0; i < howMany; i++){
    printk(KERN_ALERT "Hello %s (%d) !!!\n", whom, i);
    }
return 0;
}

static void __exit hello_exit(void){
printk(KERN_ALERT "Bye bye %s !!!\n", whom);
}

module_init(hello_init);
module_exit(hello_exit);
module_param(howMany, int, S_IRUGO);
module_param(whom, charp, S_IRUGO);

답변1

커널과 아무 관련이 없으며 단지 $$쉘의 프로세스 ID로 확장됩니다.배쉬 매뉴얼.

($$)는 쉘의 프로세스 ID로 확장됩니다. () 서브셸에서는 서브셸이 아닌 호출 셸의 프로세스 ID로 확장됩니다.

백슬래시를 사용하여 달러 기호를 이스케이프하거나 작은따옴표를 사용하여 확장을 방지합니다.

$ echo "$$" "\$$" '$$'
29058 $$ $$

관련 정보