2014-01-13 3 views
5

Возможно ли, чтобы терминал OSX мог получить длину строки? Например:OSX terminal string length

$ echo "foo".length 

Или

$ echo (cat file.txt).length 
+0

'echo $ {" foo "}' или, возможно, 'echo" foo "| wc -c' – gtgaxiola

+0

Итак 'echo $ {" foo "}' return 'zsh: bad substitution' и' echo "foo" | wc -c' вернулся '4'! –

+0

Интересно .... echo "foo" | wc -c работает в Linux (на данный момент нет тестового терминала) – gtgaxiola

ответ

11
echo "foo" | wc -c 

Подсчитывает количество символов на stdin. Обратите внимание, что это вернет 4, так как echo добавляет новую строку в конце. Используйте printf или echo -n, чтобы избежать добавления новой строки.

printf "foo" | wc -c 
+0

'printf" foo "| wc -c' действительно работает, но я не уверен, почему ответ имеет пробел (выглядит как две вкладки, а затем число), а не только номер. –

+0

Это странно. В моей системе Ubuntu 'wc -c' просто печатает' 3', никаких лишних пробелов. –

+0

Я нахожусь в веселой шторме любви, то есть OSX –

1

Try с этим:

var=hello; echo ${#var} 
+0

Как я могу это сделать без присвоения var? –

0

длина выраж можно использовать

hello="world" 
expr length $hello 
5 

или просто

expr length "hello" 
5 
+0

Опять же, нет ли способа сделать это без назначения var? –

0

Предлагаемое решение добавляет 1 к фактической длине. На мой взгляд, это лучшее решение.

Добавлено это ваш .zshrc или .bash_profile

lenFunc() { 
    echo ${#1} 
} 

alias len=lenFunc 

Тогда

len foo 
// output 3 
0

От OS X терминала, вы можете также использовать Swift REPL сделать так:

user_name$ swift 
Welcome to Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42). 
Type :help for assistance. 
    1> print("foo".characters.count) 
3 
    2> 

В Swift 4 это будет print("foo".count)