Команда не найдена ошибка awk
Я получаю это 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)
5 ответов
Тебе нужно echo
передать переменную abc
чтобы сделать так, чтобы 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
ПРИМЕЧАНИЕ. Рекомендуется заключать в кавычки переменную, с которой вы работаете, чтобы это была единственная переменная, которая у вас есть. Также, чтобы вы не вводили новые переменные в.
Есть и другие способы достижения того же результата.
У меня есть некоторые из перечисленных ниже.
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"
с "$ (команда)":
abc="1 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"
оба создадут новую переменную "$L", которая будет назначена тому, что вы указали.
Все, что вам нужно, это добавить echo $abc
вместо $abc
, вот так:
abc="1 hello world"; L=$(echo $abc|awk '{print $1}'); echo $L
Проблема с оригинальным кодом, как уже упоминалось, заключается в том, что в нем отсутствует эхо. Однако, хотя другой автор упоминал, что вы всегда должны заключать в кавычки переменные, это неверно. Часто цитирование переменной помогает разрешить возможное неоднозначное имя переменной, это часто вызывает другие проблемы, мешая другим цитированию. В таких случаях правильным способом указания переменной будет использование фигурных скобок вокруг имени переменной, а не кавычек вокруг всей переменной. Например, оригинальный код может быть переписан как: abc="1 hello world"; L=$(echo ${abc}|awk '{print $1}'); echo ${L}
О, @heemayl, вы забыли процитировать $1 в вашем примере, что равнозначно тому, что заключение в кавычки вокруг этой переменной не работает.
В вашей команде ... $($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