我在这段代码中遇到了这个command not found
错误。我想打印一个句子的第一个单词
第一个代码(所需结果= 1)
abc="1 hello world"; L=$($abc|awk '{print $1}'); echo $L
1: command not found
第二个代码(所需结果= mp4)
abc="mp4 hello world"; L=$($abc|awk '{print $1}'); echo $L
No command 'mp4' found, did you mean:
Command 'mpp' from package 'makepp' (universe)
Command 'mpy' from package 'yorick-mpy-mpich2' (universe)
Command 'mpy' from package 'yorick-mpy-openmpi' (universe)
Command 'mpc' from package 'mpc' (universe)
Command 'm4' from package 'm4' (main)
Command 'mp4h' from package 'mp4h' (universe)
Command 'mpv' from package 'mpv' (universe)
Command 'mpd' from package 'mpd' (universe)
Command 'mp' from package 'mp' (universe)
Command 'mpb' from package 'mpb' (universe)
答案1
您需要echo
将变量传递abc
给 STDOUT,以便awk
可以将其用作 STDIN。虽然在这种情况下您可以避免这种情况,但是总是引用变量(和命令替换),除非您有非常好的理由不这样做(例如,您希望进行路径名扩展和单词拆分):
$ abc="1 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"
1
$ abc="mp4 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"
mp4
您还可以在这里使用字符串:
$ abc="1 hello world"; L="$(awk '{print $1}' <<<"$abc")"; echo "$L"
1
$ abc="mp4 hello world"; L="$(awk '{print $1}' <<<"$abc")"; echo "$L"
mp4
答案2
笔记:最好将要使用的变量放在引号内,这样它就是您唯一的变量。这样您就不会引入新的变量。
还有一些其他方法可以达到相同的结果。
下面我列出了一些。
abc="1 hello world"; echo "$abc" | awk '{print $1}'
或者
abc="mp4 hello world" && echo "$abc" | awk '{print $1}'
或者如果您想要一个新变量,根据命令替换,使用反引号“`”和“$(command)”仍然是实现您想要的结果的有效方法。更多信息可以找到这里。
带有反引号:
abc="mp4 hello world"; L=`echo "$abc" | awk '{print $1}'`; echo "$L"
使用“$(command)”:
abc="1 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"
两者都将产生一个新变量“$L”,并将其分配给您指定的内容。
答案3
您需要做的就是添加echo $abc
而不是$abc
,如下所示:
abc="1 hello world"; L=$(echo $abc|awk '{print $1}'); echo $L
答案4
在您的命令中... $($abc|awk '{print $1}'); ...
,的内容$abc
作为命令执行。因此出现错误。
您可以在终端中使用以下命令进行测试:
$ 1 your text
1: command not found
更正您的版本:
abc="1 hello world"; L=$(echo "$abc"|awk '{print $1}'); echo $L
或者使用更短的版本:
awk '{print $1}' <<< $(echo "1 your text")
例子
% awk '{print $1}' <<< $(echo "1 hello world")
1
% awk '{print $1}' <<< $(echo "mp4 hello world")
mp4