我有以下脚本:
set blah1 = 12743
set sid1 = `"ps -p $blah1 -o sid"`
echo "$sid1"
我希望会发生的是$ blah1将被替换为它的值,然后命令将被替换为sid1。相反,我遇到了一个错误:
ps -p 12743 -o sid: command not found.
我怎么了?
谢谢。
答案 0 :(得分:1)
您使用引号:
a b c d e
...的意思是:运行名为a
的程序;参数为b
,c
,d
和e
。
"a b c d e"
...的意思是:运行名为a b c d e
的程序(文件名中带有空格);没有参数。
该错误消息表明外壳程序正在搜索名为ps -p 12743 -o sid
的可执行文件。
答案 1 :(得分:1)
您的错误是双引号。
ps
命令带有一组参数。这些参数在反引号内的字符串中用空格分隔。通过使用双引号,可以消除空格分隔,并要求Shell启动一个看起来像整个带引号的字符串的命令。
尝试:
set sid1 = `ps -p "$blah1" -o sid`
看看您的票价是否有所改善。
通过示例,尝试将shell提示符下的ls -a
输出与"ls -a"
的输出进行比较。
1% ls -a
. ..
2% "ls -a"
ls -a: Command not found.
除csh以外的其他Shell(即POSIX,Bash等)也会发生相同的情况。