2014-10-13 7 views
0

У меня есть два сценария bash. Script1 выполняет следующие действия (не имеет значения, почему я использую два сценария, просто предположим, что это по уважительной причине):Глобальные переменные, не действующие как локальные переменные?

export RUN=1 

И Скрипт2:

. script1 
echo ${RUN} 
sed -n ${RUN}p mytext.txt > mytextnew.txt 

В сценарии 2, эхо возвращается " 1 », как я ожидаю. Однако команда sed (или любая другая команда, с которой я пытаюсь использовать переменную RUN) возвращает ошибку, как будто RUN не существует. Если я просто запустил script2 со следующим:

RUN=2p 
sed -n ${RUN} mytext.txt > mytextnew.txt 

затем все работает нормально. Это только происходит с глобальными переменными. Если я делаю то же самое с локальными переменными, которые я делаю с глобальными переменными, все работает. Но в тот момент, когда глобальная переменная выбрасывается туда, все идет с трудом.

Любое понимание проблемы?

+0

вы имеете в виду '. script1' (с пробелом, справа?), и sed не будет возвращать ошибку, если RUN isn; t определен, просто выполнит 'sed -np', что будет печатать все строки ... так что если выдает ошибку, вот еще одна проблема , – cajwine

+0

Да, конечно, спасибо, что поймали это. – user1566200

+0

вы уверены, что ваш скрипт не содержит '\ r' (например, окончания строки Windows?), В этом случае RUN получит значение' 1 \ r', и это вызовет ошибку (конечно) .... – cajwine

ответ

0

Следующая:

$ cat script1 
export RUN=1 

$cat script2 
. script1 
echo ${RUN} 
sed -n ${RUN}p /etc/passwd 

после

$ bash -x script2 

отпечатков

+ . script1 
++ export RUN=1 
++ RUN=1 
+ echo 1 
1 
+ sed -n 1p /etc/passwd 

при добавлении пространства к

sed -n ${RUN} p /etc/passwd 

печатает

sed: -e expression #1, char 1: missing command 

проверка содержание $ RUN с

echo "${RUN}" | od -bc #note the double quotes 
#or 
echo "${RUN}" | xxd 

, чтобы увидеть, что на самом деле содержит вашу $RUN переменную ...

+0

Когда я запускаю' echo '$ {RUNLINE} "', я получаю 0000000 062 012 (2 \ n) – user1566200

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