2016-06-22 5 views
0
arg="[email protected]" 
firstChar=$("$arg" | cut -c 1) 

Это результат как «x: command not found», где x - предоставленный аргумент, $ @. Почему это не работает?Аргументы/переменные в функции сценария Bash

Просто нужно получить первую букву аргумента (предоставляется только одна).

+3

Добро пожаловать на переполнение стека. Вскоре прочитайте страницу [About] и страницу [Ask]. Вы говорите о функции Bash; вы не показывали функцию Bash - возможно, вы имели в виду скрипт, также упоминаемый в названии. Вы не показали, как вызывается код - кажется, вы передали ему аргумент 'x', и у вас нет программы под названием' x' на вашем компьютере. Возможно, вы имели в виду 'firstChar = $ (echo" $ arg "| cut -c 1)'? Но если это Bash, вы можете добиться большего с помощью [расширения параметров] (https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion), например 'firstChar = '$ { Arg: 0: 1} "'. –

+1

Назначение '$ @' одному параметру поражает цель использования '$ @'. Либо «$ 1» будет достаточно, либо ваш код, по сути, сломан. Каково ожидаемое значение '$ @'? – chepner

ответ

0

Необходимо исправить свой сценарий, во второй строке есть проблема. Вот исправленный один, который работает ..

arg="[email protected]" 
echo $arg 
firstChar=(`echo "$arg" | cut -c 1`) 
echo $firstChar 
+0

О, боже, спасибо. Я пробовал случайные вещи в прошлом, как 3 часа. Синтаксис Баша бог ужасен. –

+0

Создание 'firstChar' массива кажется нечетным в лучшем случае. – tripleee

+0

К сожалению, это сломанно и семантически неправильно. Broken: попробуйте его с аргументом, равным '-n',' -e' или '-E' или новой строкой (' $ '\ n'') - исправьте это, заменив 'echo'' printf'. Это семантически неправильно, так как вы создаете _array_' firstChar' ... –

-1

Вы должны использовать Eval для выполнения кода, хранящегося в переменной

arg="[email protected]" 
firstChar=$(eval "$arg" | cut -c 1) 
+0

Нет, это приводит к «команде не найденной», –

Смежные вопросы